]> git.eshelyaron.com Git - emacs.git/commitdiff
Port pdumper to unlikely long sprintf output
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 22 Jan 2025 06:18:17 +0000 (22:18 -0800)
committerEshel Yaron <me@eshelyaron.com>
Thu, 23 Jan 2025 10:25:07 +0000 (11:25 +0100)
* src/pdumper.c (dump_ptr_referrer): Port to platforms
where sprintf %p generates absurdly long output.
(dump_vectorlike): Port to hypothetical platforms
where %d generates absurdly long output.

(cherry picked from commit 4a25ed300fec579f8fc75a53edbd9a6f74e2d44f)

src/pdumper.c

index e83c7bcf9a1570caf7768b89fc8241b9f6f89490..174dfdb47ef823c05467ba6f8930f7058afcc19f 100644 (file)
@@ -677,8 +677,8 @@ static Lisp_Object
 dump_ptr_referrer (const char *label, void const *address)
 {
   char buf[128];
-  buf[0] = '\0';
-  sprintf (buf, "%s @ %p", label, address);
+  if (sizeof buf <= snprintf (buf, sizeof buf, "%s @ %p", label, address))
+    strcpy (buf + sizeof buf - 4, "...");
   return build_string (buf);
 }
 
@@ -3145,8 +3145,10 @@ dump_vectorlike (struct dump_context *ctx,
     case PVEC_TS_NODE:
       break;
     }
-  char msg[60];
-  snprintf (msg, sizeof msg, "pseudovector type %d", (int) ptype);
+  int iptype = ptype;
+  static char const fmt[] = "pseudovector type %d";
+  char msg[sizeof fmt - sizeof "%d" + INT_STRLEN_BOUND (iptype) + 1];
+  sprintf (msg, fmt, iptype);
   error_unsupported_dump_object (ctx, lv, msg);
 }