libopkg: properly fix parse_version()
authorJo-Philipp Wich <jo@mein.io>
Sat, 18 Feb 2017 12:48:25 +0000 (13:48 +0100)
committerJo-Philipp Wich <jo@mein.io>
Sat, 18 Feb 2017 12:51:56 +0000 (13:51 +0100)
A previous attempt to fix the verison/revision split caused unterminated
strings to get stored in the blob buffer, properly fix this case now.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
libopkg/pkg_parse.c

index 31e7309c0f43325767e7fa3938257317ecc8ee56..f6f0a4d6f0eac923da14d017f7c87dbfbe69762c 100644 (file)
@@ -63,7 +63,7 @@ static void parse_conffiles(pkg_t * pkg, const char *cstr)
 
 int parse_version(pkg_t * pkg, const char *vstr)
 {
-       char *colon, *rev;
+       char *colon, *dup, *rev;
 
        if (strncmp(vstr, "Version:", 8) == 0)
                vstr += 8;
@@ -81,15 +81,18 @@ int parse_version(pkg_t * pkg, const char *vstr)
                vstr = ++colon;
        }
 
-       rev = strrchr(vstr, '-');
+
+       dup = xstrdup(vstr);
+       rev = strrchr(dup, '-');
 
        if (rev) {
-               pkg_set_string(pkg, PKG_REVISION, rev + 1);
-               pkg_set_raw(pkg, PKG_VERSION, vstr, rev - vstr - 1);
-       } else {
-               pkg_set_string(pkg, PKG_VERSION, vstr);
+               *rev++ = '\0';
+               pkg_set_string(pkg, PKG_REVISION, rev);
        }
 
+       pkg_set_string(pkg, PKG_VERSION, dup);
+       free(dup);
+
        return 0;
 }