nm: Fix size passed to snprintf for invalid sh_name case.

Signed-off-by: Roland McGrath <roland@hack.frob.com>
diff --git a/src/ChangeLog b/src/ChangeLog
index 9f0c525..f08ee08 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2012-12-11  Roland McGrath  <roland@hack.frob.com>
+
+	* nm.c (show_symbols_sysv): Fix size passed to snprintf for invalid
+	sh_name case.
+	Reported by David Abdurachmanov <David.Abdurachmanov@cern.ch>.
+
 2012-10-16  Mark Wielaard  <mjw@redhat.com>
 
 	* readelf.c (print_ops): DW_OP_skip and DW_OP_bra targets are
diff --git a/src/nm.c b/src/nm.c
index f50da0b..8a1c57a 100644
--- a/src/nm.c
+++ b/src/nm.c
@@ -769,8 +769,9 @@
 			       gelf_getshdr (scn, &shdr_mem)->sh_name);
       if (unlikely (name == NULL))
 	{
-	  name = alloca (sizeof "[invalid sh_name 0x12345678]");
-	  snprintf (name, sizeof name, "[invalid sh_name %#" PRIx32 "]",
+          const size_t bufsz = sizeof "[invalid sh_name 0x12345678]"
+	  name = alloca (bufsz);
+	  snprintf (name, bufsz, "[invalid sh_name %#" PRIx32 "]",
 		    gelf_getshdr (scn, &shdr_mem)->sh_name);
 	}
       scnnames[elf_ndxscn (scn)] = name;