Panu Matilainen 23ac61
commit f4c79584d01c6394544c86c122d2f32f77a1d02d
Panu Matilainen 23ac61
Author: Michael Schroeder <mls@suse.de>
Panu Matilainen 23ac61
Date:   Wed May 18 09:04:40 2011 +0300
Panu Matilainen 23ac61
Panu Matilainen 23ac61
    Always copy macro source when expanding it
Panu Matilainen 23ac61
    - A macro can undefine itself, and unless we grab a copy of it we'll
Panu Matilainen 23ac61
      end up accessing already freed memory. Fixes a regression from
Panu Matilainen 23ac61
      commit ebc4ceaaeb8bb59019f4635471b28eb5f3eaaaa6 which assumed
Panu Matilainen 23ac61
      a copy is not always needed.
Panu Matilainen 23ac61
    
Panu Matilainen 23ac61
    Signed-off-by: Panu Matilainen <pmatilai@redhat.com>
Panu Matilainen 23ac61
Panu Matilainen 23ac61
diff --git a/rpmio/macro.c b/rpmio/macro.c
Panu Matilainen 23ac61
index 8ea4819..d79ef18 100644
Panu Matilainen 23ac61
--- a/rpmio/macro.c
Panu Matilainen 23ac61
+++ b/rpmio/macro.c
Panu Matilainen 23ac61
@@ -1022,12 +1022,12 @@ expandMacro(MacroBuf mb, const char *src, size_t slen)
Panu Matilainen 23ac61
     char *source = NULL;
Panu Matilainen 23ac61
 
Panu Matilainen 23ac61
     /* Handle non-terminated substrings by creating a terminated copy */
Panu Matilainen 23ac61
-    if (slen > 0) {
Panu Matilainen 23ac61
-	source = xmalloc(slen + 1);
Panu Matilainen 23ac61
-	strncpy(source, src, slen);
Panu Matilainen 23ac61
-	source[slen] = '\0';
Panu Matilainen 23ac61
-	s = source;
Panu Matilainen 23ac61
-    }
Panu Matilainen 23ac61
+    if (!slen)
Panu Matilainen 23ac61
+	slen = strlen(src);
Panu Matilainen 23ac61
+    source = xmalloc(slen + 1);
Panu Matilainen 23ac61
+    strncpy(source, src, slen);
Panu Matilainen 23ac61
+    source[slen] = '\0';
Panu Matilainen 23ac61
+    s = source;
Panu Matilainen 23ac61
 
Panu Matilainen 23ac61
     if (mb->buf == NULL) {
Panu Matilainen 23ac61
 	size_t blen = MACROBUFSIZ + strlen(s);