diff options
author | Dan McGee <dan@archlinux.org> | 2008-01-06 00:34:10 +0100 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2008-01-06 00:35:43 +0100 |
commit | 5aa873edb696bbf678cbb57df43d90e23d562179 (patch) | |
tree | f58346db23f2f08063a8a7ee50132b4e2612fb8b | |
parent | 85a8b150edb7d1fca67f7f0abee3400bd57e7d5a (diff) | |
download | pacman-5aa873edb696bbf678cbb57df43d90e23d562179.tar.gz pacman-5aa873edb696bbf678cbb57df43d90e23d562179.tar.xz |
sync.c: add sanity check so we don't dereference a null pointer
Originally noticed in FS#9024, but was fixed in previous changes anyway.
However, it doesn't hurt to still check it.
Also add a pactest from Chantry Xavier for the original problem to ensure
we can't reproduce it.
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r-- | lib/libalpm/sync.c | 14 | ||||
-rw-r--r-- | pactest/tests/sync404.py | 26 |
2 files changed, 34 insertions, 6 deletions
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index dd54ce6c..ec4af9f4 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -570,12 +570,14 @@ int _alpm_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync } if(rmpkg) { pmsyncpkg_t *rsync = _alpm_sync_find(trans->packages, rmpkg); - void *vpkg; - _alpm_log(PM_LOG_DEBUG, "removing '%s' from target list\n", - rsync->pkg->name); - trans->packages = alpm_list_remove(trans->packages, rsync, - syncpkg_cmp, &vpkg); - _alpm_sync_free(vpkg); + if(rsync) { + void *vpkg; + _alpm_log(PM_LOG_DEBUG, "removing '%s' from target list\n", + rsync->pkg->name); + trans->packages = alpm_list_remove(trans->packages, rsync, + syncpkg_cmp, &vpkg); + _alpm_sync_free(vpkg); + } continue; } } diff --git a/pactest/tests/sync404.py b/pactest/tests/sync404.py new file mode 100644 index 00000000..118f9e9d --- /dev/null +++ b/pactest/tests/sync404.py @@ -0,0 +1,26 @@ +self.description = "FS#9024" + +sp = pmpkg("xorg-server") +sp.depends = [ "libgl" ] +self.addpkg2db("sync", sp) + +sp1 = pmpkg("nvidia-utils") +sp1.provides = [ "libgl" ] +sp1.conflicts = [ "libgl", "libgl-dri" ] +self.addpkg2db("sync", sp1) + +sp2 = pmpkg("libgl") +sp2.provides = [ "libgl-dri" ] +self.addpkg2db("sync", sp2) + +sp3 = pmpkg("nvidia") +sp3.depends = [ "nvidia-utils" ] +self.addpkg2db("sync", sp3) + +self.args = "-S xorg-server nvidia" + +self.addrule("PACMAN_RETCODE=0") +self.addrule("PKG_EXIST=xorg-server") +self.addrule("PKG_EXIST=nvidia") +self.addrule("PKG_EXIST=nvidia-utils") +self.addrule("!PKG_EXIST=libgl") |