diff options
author | Andrew Gregory <andrew.gregory.8@gmail.com> | 2017-12-20 23:22:36 -0500 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2018-01-06 13:35:48 +1000 |
commit | 3a9a510ca873df123a117133c7cb3ebaa711159c (patch) | |
tree | eaf45ea5b0fa926e2037f2fbb67c853da52a894a | |
parent | 8bf972824a331ebcb30de01103b26b92b6792d59 (diff) | |
download | pacman-3a9a510ca873df123a117133c7cb3ebaa711159c.tar.xz |
do not rely on name hashes for matching
6cfc4757b98e813428d261dbc185e20618ca83a6 was overzealous in attempting
to optimize away a call to strcmp based on a comparison of hashes. The
call can be skipped if the hashes are different, but different strings
could have the same hash.
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r-- | lib/libalpm/deps.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c index 96f91739..3d3f8ef2 100644 --- a/lib/libalpm/deps.c +++ b/lib/libalpm/deps.c @@ -698,10 +698,8 @@ static alpm_pkg_t *resolvedep(alpm_handle_t *handle, alpm_depend_t *dep, } for(j = _alpm_db_get_pkgcache(db); j; j = j->next) { alpm_pkg_t *pkg = j->data; - /* with hash != hash, we can even skip the strcmp() as we know they can't - * possibly be the same string */ - if(pkg->name_hash != dep->name_hash && _alpm_depcmp(pkg, dep) - && !alpm_pkg_find(excluding, pkg->name)) { + if((pkg->name_hash != dep->name_hash || strcmp(pkg->name, dep->name) != 0) + && _alpm_depcmp(pkg, dep) && !alpm_pkg_find(excluding, pkg->name)) { if(alpm_pkg_should_ignore(handle, pkg)) { alpm_question_install_ignorepkg_t question = { .type = ALPM_QUESTION_INSTALL_IGNOREPKG, |