]> granicus.if.org Git - gc/commitdiff
Check GC_base result in GC_print_all_smashed_proc
authorIvan Maidanski <ivmai@mail.ru>
Fri, 19 Oct 2012 04:58:46 +0000 (08:58 +0400)
committerIvan Maidanski <ivmai@mail.ru>
Fri, 19 Oct 2012 12:59:36 +0000 (16:59 +0400)
* dbg_mlc.c (GC_print_all_smashed_proc): Add a code for a
LINT-like (static code analysis) tool to instruct it that GC_base is
invoked only with valid GC_smashed[] elements (so its result passed
to GC_print_smashed_obj is non-NULL).

dbg_mlc.c

index 5229677d28f31a4738949b6295cb4a745ff9efcf..d98195bbeb117c6171f06a35ee368427f3b17da4 100644 (file)
--- a/dbg_mlc.c
+++ b/dbg_mlc.c
@@ -918,8 +918,12 @@ STATIC void GC_print_all_smashed_proc(void)
     if (GC_n_smashed == 0) return;
     GC_err_printf("GC_check_heap_block: found smashed heap objects:\n");
     for (i = 0; i < GC_n_smashed; ++i) {
-        GC_print_smashed_obj("", (ptr_t)GC_base(GC_smashed[i]) + sizeof(oh),
-                             GC_smashed[i]);
+        ptr_t base = (ptr_t)GC_base(GC_smashed[i]);
+
+#       ifdef LINT2
+          if (!base) ABORT("Invalid GC_smashed element");
+#       endif
+        GC_print_smashed_obj("", base + sizeof(oh), GC_smashed[i]);
         GC_smashed[i] = 0;
     }
     GC_n_smashed = 0;