util.c: add stricter checks for pkgver conformance.

Make xbps_pkg_{name,version} return NULL if next character
after the last '-' character is not a digit, and if there's a digit
make sure that there exists a '_' character too.

Added more tests to the testsuite to catch this. With these changes
'python-e_dbus' is properly detected and validated.
This commit is contained in:
Juan RP
2013-11-17 11:34:14 +01:00
parent d0380d5cd2
commit c44d7070a4
2 changed files with 21 additions and 3 deletions

View File

@ -38,6 +38,7 @@
#include <string.h>
#include <errno.h>
#include <fnmatch.h>
#include <ctype.h>
#include <sys/utsname.h>
#include "xbps_api_impl.h"
@ -96,7 +97,10 @@ xbps_pkg_version(const char *pkg)
if ((p = strrchr(pkg, '-')) == NULL)
return NULL;
if (strrchr(p, '_') == NULL)
if (!isdigit((unsigned char)p[1]))
return NULL;
if (strchr(p, '_') == NULL)
return NULL;
return p + 1; /* skip first '_' */
@ -113,6 +117,9 @@ xbps_pkg_revision(const char *pkg)
if ((p = strrchr(pkg, '_')) == NULL)
return NULL;
if (!isdigit((unsigned char)p[1]))
return NULL;
return p + 1; /* skip first '_' */
}
@ -126,7 +133,10 @@ xbps_pkg_name(const char *pkg)
if ((p = strrchr(pkg, '-')) == NULL)
return NULL;
if (strrchr(p, '_') == NULL)
if (!isdigit((unsigned char)p[1]))
return NULL;
if (strchr(p, '_') == NULL)
return NULL;
len = strlen(pkg) - strlen(p) + 1;