libopkg: do not modify original version string in parse_version()
authorJo-Philipp Wich <jo@mein.io>
Fri, 17 Feb 2017 19:01:42 +0000 (20:01 +0100)
committerJo-Philipp Wich <jo@mein.io>
Fri, 17 Feb 2017 19:01:42 +0000 (20:01 +0100)
The parse_version() function might be parsing the version string of another
pkg_t instance so we must not modify it inplace to truncate the revision
part, otherwise we will clobber the original version, leading to failing
comparisations later on.

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

index ae52deb..31e7309 100644 (file)
@@ -84,12 +84,12 @@ int parse_version(pkg_t * pkg, const char *vstr)
        rev = strrchr(vstr, '-');
 
        if (rev) {
-               *rev++ = '\0';
-               pkg_set_string(pkg, PKG_REVISION, 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);
        }
 
-       pkg_set_string(pkg, PKG_VERSION, vstr);
-
        return 0;
 }