xbps: backport patch from git to fix xbps_pkg_{name,version} issues.

This commit is contained in:
Juan RP 2013-11-17 11:45:18 +01:00
parent 29a95d9a09
commit 541c453bb1
2 changed files with 100 additions and 1 deletions

View file

@ -0,0 +1,99 @@
From c44d7070a4152cbb8279e10fa6206557dd7d6772 Mon Sep 17 00:00:00 2001
From: Juan RP <xtraeme@gmail.com>
Date: Sun, 17 Nov 2013 11:34:14 +0100
Subject: [PATCH] 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.
---
lib/util.c | 14 ++++++++++++--
tests/xbps/libxbps/util/main.c | 10 +++++++++-
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/lib/util.c b/lib/util.c
index 37cae80..c2593c3 100644
--- lib/util.c
+++ lib/util.c
@@ -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;
diff --git a/tests/xbps/libxbps/util/main.c b/tests/xbps/libxbps/util/main.c
index 7fa85ef..cc1cb65 100644
--- tests/libxbps/util/main.c
+++ tests/libxbps/util/main.c
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2012 Juan Romero Pardines.
+ * Copyright (c) 2012-2013 Juan Romero Pardines.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -36,14 +36,22 @@ ATF_TC_HEAD(util_test, tc)
ATF_TC_BODY(util_test, tc)
{
+ ATF_CHECK_EQ(xbps_pkg_name("font-adobe-a"), NULL);
+ ATF_CHECK_EQ(xbps_pkg_name("font-adobe-1"), NULL);
+ ATF_CHECK_EQ(xbps_pkg_name("font-adobe-100dpi"), NULL);
ATF_CHECK_EQ(xbps_pkg_name("font-adobe-100dpi-7.8"), NULL);
+ ATF_CHECK_EQ(xbps_pkg_name("python-e_dbus"), NULL);
ATF_CHECK_EQ(xbps_pkg_version("font-adobe-100dpi"), NULL);
ATF_CHECK_EQ(xbps_pkg_version("font-adobe-100dpi-7.8"), NULL);
+ ATF_CHECK_EQ(xbps_pkg_version("python-e_dbus"), NULL);
+ ATF_CHECK_EQ(xbps_pkg_version("python-e_dbus-1"), NULL);
ATF_REQUIRE_STREQ(xbps_pkg_name("font-adobe-100dpi-7.8_2"), "font-adobe-100dpi");
ATF_REQUIRE_STREQ(xbps_pkg_name("systemd-43_1"), "systemd");
ATF_REQUIRE_STREQ(xbps_pkg_name("font-adobe-100dpi-1.8_blah"), "font-adobe-100dpi");
+ ATF_REQUIRE_STREQ(xbps_pkg_name("python-e_dbus-1.0_1"), "python-e_dbus");
ATF_REQUIRE_STREQ(xbps_pkg_version("font-adobe-100dpi-7.8_2"), "7.8_2");
ATF_REQUIRE_STREQ(xbps_pkg_version("font-adobe-100dpi-1.8_blah"), "1.8_blah");
+ ATF_REQUIRE_STREQ(xbps_pkg_version("python-e_dbus-1_1"), "1_1");
ATF_REQUIRE_STREQ(xbps_pkg_revision("systemd-43_1_0"), "0");
ATF_REQUIRE_STREQ(xbps_pkg_revision("systemd_21-43_0"), "0");
ATF_REQUIRE_STREQ(xbps_pkgpattern_name("systemd>=43"), "systemd");
--
1.8.4.1

View file

@ -1,7 +1,7 @@
# Template file for 'xbps'
pkgname=xbps
version=0.26.2
revision=1
revision=2
build_style=configure
configure_args="--prefix=/usr --sysconfdir=/etc --enable-static --enable-debug"
makedepends="zlib-devel openssl-devel libarchive-devel>=3.1.2 confuse-devel"