]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve commentary in 'field_relpos'
authorEli Zaretskii <eliz@gnu.org>
Wed, 3 Apr 2019 17:41:47 +0000 (20:41 +0300)
committerEli Zaretskii <eliz@gnu.org>
Wed, 3 Apr 2019 17:41:47 +0000 (20:41 +0300)
* src/pdumper.c (PDUMPER_MAX_OBJECT_SIZE): New macro.
(field_relpos): Use PDUMPER_MAX_OBJECT_SIZE, and comment on
why we require that relpos be not too large.

src/pdumper.c

index 7fabfa771ce4aa23819f8e8cb61c0d09401758fc..b19f206d1bd3c8eebe7bbe1663906a02aceab5c6 100644 (file)
@@ -1777,6 +1777,8 @@ dump_roots (struct dump_context *ctx)
   visit_static_gc_roots (visitor);
 }
 
+#define PDUMPER_MAX_OBJECT_SIZE 2048
+
 static dump_off
 field_relpos (const void *in_start, const void *in_field)
 {
@@ -1784,7 +1786,15 @@ field_relpos (const void *in_start, const void *in_field)
   ptrdiff_t in_field_val = (ptrdiff_t) in_field;
   eassert (in_start_val <= in_field_val);
   ptrdiff_t relpos = in_field_val - in_start_val;
-  eassert (relpos < 1024); /* Sanity check.  */
+  /* The following assertion attempts to detect bugs whereby IN_START
+     and IN_FIELD don't point to the same object/structure, on the
+     assumption that a too-large difference between them is
+     suspicious.  As of Apr 2019 the largest object we dump -- 'struct
+     buffer' -- is slightly smaller than 1KB, and we want to leave
+     some margin for future extensions.  If the assertion below is
+     ever violated, make sure the two pointers indeed point into the
+     same object, and if so, enlarge the value of PDUMPER_MAX_OBJECT_SIZE.  */
+  eassert (relpos < PDUMPER_MAX_OBJECT_SIZE);
   return (dump_off) relpos;
 }