|
25 | 25 | #include <string.h> |
26 | 26 | #include <stdio.h> |
27 | 27 | #include <stdlib.h> |
| 28 | +#include <sys/types.h> |
| 29 | +#include <sys/wait.h> |
| 30 | +#include <unistd.h> |
28 | 31 |
|
29 | 32 | #include "delta.h" |
30 | 33 | #define WC_RSA_BLINDING |
@@ -480,6 +483,36 @@ START_TEST(test_wb_patch_and_diff_multi_sector_images) |
480 | 483 | } |
481 | 484 | END_TEST |
482 | 485 |
|
| 486 | +START_TEST(test_wb_diff_get_sector_size_rejects_values_above_16bit) |
| 487 | +{ |
| 488 | + const char *saved = getenv("WOLFBOOT_SECTOR_SIZE"); |
| 489 | + char *saved_copy = saved ? strdup(saved) : NULL; |
| 490 | + pid_t pid; |
| 491 | + int status = 0; |
| 492 | + |
| 493 | + ck_assert_int_eq(setenv("WOLFBOOT_SECTOR_SIZE", "0x20000", 1), 0); |
| 494 | + pid = fork(); |
| 495 | + ck_assert_int_ne(pid, -1); |
| 496 | + |
| 497 | + if (pid == 0) { |
| 498 | + (void)wb_diff_get_sector_size(); |
| 499 | + _exit(0); |
| 500 | + } |
| 501 | + |
| 502 | + ck_assert_int_eq(waitpid(pid, &status, 0), pid); |
| 503 | + ck_assert_int_eq(WIFEXITED(status), 1); |
| 504 | + ck_assert_int_eq(WEXITSTATUS(status), 6); |
| 505 | + |
| 506 | + if (saved_copy != NULL) { |
| 507 | + ck_assert_int_eq(setenv("WOLFBOOT_SECTOR_SIZE", saved_copy, 1), 0); |
| 508 | + free(saved_copy); |
| 509 | + } |
| 510 | + else { |
| 511 | + ck_assert_int_eq(unsetenv("WOLFBOOT_SECTOR_SIZE"), 0); |
| 512 | + } |
| 513 | +} |
| 514 | +END_TEST |
| 515 | + |
483 | 516 | START_TEST(test_wb_patch_and_diff_size_changing_update) |
484 | 517 | { |
485 | 518 | uint8_t src_a[2048]; |
@@ -539,6 +572,7 @@ Suite *patch_diff_suite(void) |
539 | 572 | tcase_add_test(tc_wolfboot_delta, test_wb_patch_and_diff_completely_different_images); |
540 | 573 | tcase_add_test(tc_wolfboot_delta, test_wb_patch_and_diff_all_escape_images); |
541 | 574 | tcase_add_test(tc_wolfboot_delta, test_wb_patch_and_diff_multi_sector_images); |
| 575 | + tcase_add_test(tc_wolfboot_delta, test_wb_diff_get_sector_size_rejects_values_above_16bit); |
542 | 576 | tcase_add_test(tc_wolfboot_delta, test_wb_patch_and_diff_size_changing_update); |
543 | 577 | tcase_add_test(tc_wolfboot_delta, test_wb_patch_and_diff_single_byte_difference); |
544 | 578 | suite_add_tcase(s, tc_wolfboot_delta); |
|
0 commit comments