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
