datamatcher_init: play it safe and do a strdup on the match string
authorMichael Schroeder <mls@suse.de>
Tue, 28 May 2013 12:49:09 +0000 (14:49 +0200)
committerMichael Schroeder <mls@suse.de>
Tue, 28 May 2013 12:49:09 +0000 (14:49 +0200)
src/repodata.c

index 9b4d352..4d0a46d 100644 (file)
@@ -1071,7 +1071,7 @@ solvabledata_fetch(Solvable *s, KeyValue *kv, Id keyname)
 int
 datamatcher_init(Datamatcher *ma, const char *match, int flags)
 {
-  ma->match = match;
+  ma->match = match ? solv_strdup(match) : 0;
   ma->flags = flags;
   ma->error = 0;
   ma->matchdata = 0;
@@ -1108,6 +1108,8 @@ datamatcher_init(Datamatcher *ma, const char *match, int flags)
 void
 datamatcher_free(Datamatcher *ma)
 {
+  if (ma->match)
+    ma->match = solv_free((char *)ma->match);
   if ((ma->flags & SEARCH_STRINGMASK) == SEARCH_REGEX && ma->matchdata)
     {
       regfree(ma->matchdata);