Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=47077b0663250cdd9e12804d2a6dbe8704b368fb

commit 47077b0663250cdd9e12804d2a6dbe8704b368fb
Author: Michel Hermier <[email protected]>
Date:   Thu Nov 7 16:45:10 2013 +0100

libpacman: Make _pacman_add_addtarget use _pacman_pkg_is_valid.

diff --git a/lib/libpacman/add.c b/lib/libpacman/add.c
index 7868b48..f5b87e0 100644
--- a/lib/libpacman/add.c
+++ b/lib/libpacman/add.c
@@ -93,18 +93,11 @@ int _pacman_add_addtarget(pmtrans_t *trans, const char 
*name)
}

info = _pacman_filedb_load(NULL, name);
-       if(info == NULL) {
+       if(info == NULL || _pacman_pkg_is_valid(info, trans, name) != 0) {
/* pm_errno is already set by _pacman_filedb_load() */
goto error;
}

-       /* no additional hyphens in version strings */
-       if(strchr(_pacman_pkg_getinfo(info, PM_PKG_VERSION), '-') !=
-                       strrchr(_pacman_pkg_getinfo(info, PM_PKG_VERSION), 
'-')) {
-               pm_errno = PM_ERR_PKG_INVALID_NAME;
-               goto error;
-       }
-
if(trans->type != PM_TRANS_TYPE_UPGRADE) {
/* only install this package if it is not already installed */
if(_pacman_db_get_pkgfromcache(db_local, _pacman_pkg_getinfo(info, 
PM_PKG_NAME))) {
diff --git a/lib/libpacman/package.c b/lib/libpacman/package.c
index 072e7e1..fc6d4b1 100644
--- a/lib/libpacman/package.c
+++ b/lib/libpacman/package.c
@@ -145,7 +145,6 @@ int _pacman_pkg_cmp(const void *p1, const void *p2)
return(strcmp(((pmpkg_t *)p1)->name, ((pmpkg_t *)p2)->name));
}

-static
int _pacman_pkg_is_valid(const pmpkg_t *pkg, const pmtrans_t *trans, const char 
*pkgfile)
{
struct utsname name;
@@ -158,6 +157,10 @@ int _pacman_pkg_is_valid(const pmpkg_t *pkg, const 
pmtrans_t *trans, const char
_pacman_log(PM_LOG_ERROR, _("missing package version in %s"), pkgfile);
goto pkg_error;
}
+       if(strchr(pkg->version, '-') != strrchr(pkg->version, '-')) {
+               _pacman_log(PM_LOG_ERROR, _("version contains additional 
hyphens in %s"), pkgfile);
+               goto invalid_name_error;
+       }
if (trans != NULL && !(trans->flags & PM_TRANS_FLAG_NOARCH)) {
if(_pacman_strempty(pkg->arch)) {
_pacman_log(PM_LOG_ERROR, _("missing package architecture in %s"), pkgfile);
@@ -172,6 +175,10 @@ int _pacman_pkg_is_valid(const pmpkg_t *pkg, const 
pmtrans_t *trans, const char
}
return 0;

+invalid_name_error:
+       pm_errno = PM_ERR_PKG_INVALID_NAME;
+       return -1;
+
arch_error:
pm_errno = PM_ERR_WRONG_ARCH;
return -1;
diff --git a/lib/libpacman/package.h b/lib/libpacman/package.h
index f60215a..be3cb34 100644
--- a/lib/libpacman/package.h
+++ b/lib/libpacman/package.h
@@ -29,6 +29,7 @@
#include <time.h>
#endif
#include "pacman.h"
+#include "trans.h"

enum {
PKG_FROM_CACHE = 1,
@@ -97,7 +98,9 @@ do { \
pmpkg_t* _pacman_pkg_new(const char *name, const char *version);
pmpkg_t *_pacman_pkg_dup(pmpkg_t *pkg);
void _pacman_pkg_free(void *data);
+
int _pacman_pkg_cmp(const void *p1, const void *p2);
+int _pacman_pkg_is_valid(const pmpkg_t *pkg, const pmtrans_t *trans, const 
char *pkgfile);
pmpkg_t *_pacman_pkg_load(const char *pkgfile);
pmpkg_t *_pacman_pkg_isin(const char *needle, pmlist_t *haystack);
int _pacman_pkg_splitname(char *target, char *name, char *version, int 
witharch);
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to