]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Fix latent crash in ada_variant_discrim_name
authorTom Tromey <tromey@adacore.com>
Mon, 9 Sep 2024 17:29:12 +0000 (11:29 -0600)
committerTom Tromey <tromey@adacore.com>
Thu, 6 Mar 2025 21:17:17 +0000 (14:17 -0700)
ada_variant_discrim_name does this:

  for (discrim_end = name + strlen (name) - 6; discrim_end != name;

If NAME is too short, this will construct an invalid pointer, perhaps
causing a crash.

This patch arranges to check the length first.

gdb/ada-lang.c

index 95ceb10d3ab83fed3b8c2646ed83ee8ef17b2d18..aef2b1debba6edcd5c5311386c0ae4174dc42322 100644 (file)
@@ -6685,8 +6685,10 @@ ada_variant_discrim_name (struct type *type0)
   if (name == NULL || name[0] == '\000')
     return "";
 
-  for (discrim_end = name + strlen (name) - 6; discrim_end != name;
-       discrim_end -= 1)
+  size_t len = strlen (name);
+  if (len < 6)
+    return "";
+  for (discrim_end = name + len - 6; discrim_end != name; discrim_end -= 1)
     {
       if (startswith (discrim_end, "___XVN"))
        break;