]> granicus.if.org Git - gc/commitdiff
Fix null pointer dereference on out-of-memory in tests
authorIvan Maidanski <ivmai@mail.ru>
Tue, 9 Feb 2016 20:35:33 +0000 (23:35 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 9 Feb 2016 20:35:33 +0000 (23:35 +0300)
* tests/disclaim_bench.c (main): Check GC_MALLOC result for NULL
(abort in case of out-of-memory) before dereference.
* tests/test.c (run_one_test): Likewise.
* tests/disclaim_test.c (pair_new): Move is_pair call (in my_assert)
down to be after GC_finalized_malloc result check for NULL.

tests/disclaim_bench.c
tests/disclaim_test.c
tests/test.c

index f9bfc5805d432dc7009d9b00fc0fa0190a7bda55..2984e8f4eeadc88172d1e03088070272f7fde2c5 100644 (file)
@@ -92,9 +92,6 @@ int main(int argc, char **argv)
 
     GC_INIT();
     GC_init_finalized_malloc();
-
-    keep_arr = GC_MALLOC(sizeof(void *)*KEEP_CNT);
-
     if (argc == 2 && strcmp(argv[1], "--help") == 0) {
         fprintf(stderr,
                 "Usage: %s [FINALIZATION_MODEL]\n"
@@ -113,6 +110,12 @@ int main(int argc, char **argv)
         model_max = 2;
     }
 
+    keep_arr = GC_MALLOC(sizeof(void *) * KEEP_CNT);
+    if (NULL == keep_arr) {
+        fprintf(stderr, "Out of memory!\n");
+        exit(3);
+    }
+
     printf("\t\t\tfin. ratio       time/s    time/fin.\n");
     for (model = model_min; model <= model_max; ++model) {
         double t = 0.0;
index 659bf106c40bf4f45497cead5abf4c5ebb9ba84f..47d5144d2caaa848d2daa1c43eb306adc6f87e71 100644 (file)
@@ -120,11 +120,11 @@ pair_new(pair_t car, pair_t cdr)
     static const struct GC_finalizer_closure fc = { pair_dct, NULL };
 
     p = GC_finalized_malloc(sizeof(struct pair_s), &fc);
-    my_assert(!is_pair(p));
     if (p == NULL) {
         fprintf(stderr, "Out of memory!\n");
         exit(3);
     }
+    my_assert(!is_pair(p));
     my_assert(memeq(p, 0, sizeof(struct pair_s)));
     memcpy(p->magic, pair_magic, sizeof(p->magic));
     p->checksum = 782 + (car? car->checksum : 0) + (cdr? cdr->checksum : 0);
index a8604b843d375978fcfdbcf7ed5a4b5cdcfa5ba7..a09c4ad50ebc0d0c00c0c92aa6168dc5cec02baa 100644 (file)
@@ -1244,6 +1244,7 @@ void run_one_test(void)
         FAIL;
       }
       z = GC_malloc(8);
+      CHECK_OUT_OF_MEMORY(z);
       GC_PTR_STORE(z, x);
       if (*z != x) {
         GC_printf("GC_PTR_STORE failed: %p != %p\n", (void *)(*z), (void *)x);