test_out_of_bounds_write.c 1.2 KB

123456789101112131415161718192021222324252627282930313233
  1. #include <string.h>
  2. #include "unity.h"
  3. #include "esp_spi_flash.h"
  4. #include "esp_ota_ops.h"
  5. #if CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS || CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS
  6. static const char *data = "blah blah blah";
  7. #if CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS
  8. #define TEST_TAGS "[spi_flash][esp_flash]"
  9. #else // ABORTS
  10. #define TEST_TAGS "[spi_flash][esp_flash][ignore]"
  11. #endif
  12. TEST_CASE("can't overwrite bootloader", TEST_TAGS)
  13. {
  14. TEST_ESP_ERR(ESP_ERR_INVALID_ARG, spi_flash_write(0x1000, data, strlen(data)));
  15. TEST_ESP_ERR(ESP_ERR_INVALID_ARG, spi_flash_write(0x0FF8, data, strlen(data)));
  16. TEST_ESP_ERR(ESP_ERR_INVALID_ARG, spi_flash_write(0x1400, data, strlen(data)));
  17. TEST_ESP_ERR(ESP_ERR_INVALID_ARG, spi_flash_erase_range(0x8000, 0x2000));
  18. TEST_ESP_ERR(ESP_ERR_INVALID_ARG, spi_flash_erase_range(0x7000, 0x2000));
  19. }
  20. TEST_CASE("can't overwrite current running app", TEST_TAGS)
  21. {
  22. const esp_partition_t *p = esp_ota_get_running_partition();
  23. TEST_ESP_ERR(ESP_ERR_INVALID_ARG, spi_flash_write(p->address + 1024, data, strlen(data)));
  24. TEST_ESP_ERR(ESP_ERR_INVALID_ARG, spi_flash_erase_range(p->address + 4096, 8192));
  25. }
  26. #endif // FAILS || ABORTS