"Fix" memory exhaustion with many duplicate basenames on erase and a few

backports
This commit is contained in:
Paul Nasrat 2006-03-31 16:18:33 +00:00
parent 8a6c7af43b
commit 57dc36fca1
4 changed files with 73 additions and 2 deletions

View File

@ -0,0 +1,12 @@
--- rpm-4.4.2/lib/transaction.c.netsharedpath 2006-02-13 18:15:37.000000000 -0500
+++ rpm-4.4.2/lib/transaction.c 2006-02-13 18:15:38.000000000 -0500
@@ -820,6 +820,9 @@
/*@innercontinue@*/ continue;
if (strncmp(dn, *nsp, dnlen))
/*@innercontinue@*/ continue;
+ /* Insure that only the netsharedpath basename is compared. */
+ if ((s = strchr((*nsp) + dnlen, '/')) != NULL && s[1] != '\0')
+ /*@innercontinue@*/ continue;
if (strncmp(bn, (*nsp) + dnlen, bnlen))
/*@innercontinue@*/ continue;
len = dnlen + bnlen;

20
rpm-4.4.2-userlock.patch Normal file
View File

@ -0,0 +1,20 @@
--- rpm-4.4.2/lib/rpmlock.c.userlock 2006-02-23 15:24:46.000000000 -0500
+++ rpm-4.4.2/lib/rpmlock.c 2006-02-23 15:25:53.000000000 -0500
@@ -37,7 +37,7 @@
/* XXX oneshot to determine path for fcntl lock. */
if (rpmlock_path == NULL) {
- char * t = rpmExpand(rpmlock_path_default, NULL);
+ char * t = rpmGenPath(rootdir, rpmlock_path_default, NULL);
if (t == NULL || *t == '\0' || *t == '%')
t = RPMLOCK_PATH;
rpmlock_path = xstrdup(t);
@@ -129,7 +129,7 @@
const char *rootDir = rpmtsRootDir(ts);
rpmlock lock;
- if (!rootDir)
+ if (!rootDir || rpmtsChrootDone(ts))
rootDir = "/";
lock = rpmlock_new(rootDir);
/*@-branchstate@*/

27
rpm-4.4.2-vercmp.patch Normal file
View File

@ -0,0 +1,27 @@
--- rpm-4.4.2/lib/rpmvercmp.c.vercmp 2005-07-03 22:32:22.000000000 -0400
+++ rpm-4.4.2/lib/rpmvercmp.c 2006-02-13 18:20:01.000000000 -0500
@@ -39,6 +39,9 @@
while (*one && !xisalnum(*one)) one++;
while (*two && !xisalnum(*two)) two++;
+ /* If we ran to the end of either, we are finished with the loop */
+ if (!(*one && *two)) break;
+
str1 = one;
str2 = two;
@@ -64,9 +67,13 @@
*str2 = '\0';
/*@=boundswrite@*/
+ /* this cannot happen, as we previously tested to make sure that */
+ /* the first string has a non-null segment */
+ if (one == str1) return -1; /* arbitrary */
+
/* take care of the case where the two version segments are */
/* different types: one numeric, the other alpha (i.e. empty) */
- if (one == str1) return -1; /* arbitrary */
+ /* numeric segments are always newer than alpha segments */
/* XXX See patch #60884 (and details) from bugzilla #50977. */
if (two == str2) return (isnum ? 1 : -1);

View File

@ -20,7 +20,7 @@ Name: rpm
%define version 4.4.2
Version: %{version}
%{expand: %%define rpm_version %{version}}
Release: 15.2
Release: 16
Group: System Environment/Base
Source: ftp://wraptastic.org/pub/rpm-4.4.x/rpm-%{rpm_version}.tar.gz
Source1: mono-find-provides
@ -45,6 +45,9 @@ Patch16: rpm-4.4.2-file-softmagic.patch
Patch17: rpm-4.4.2-no-large-mmap.patch
Patch18: rpm-4.4.2-perlmainprov.patch
Patch19: rpm-4.4.2-rpmsq-deadlock.patch
Patch20: rpm-4.4.2-netsharedpath.patch
Patch21: rpm-4.4.2-userlock.patch
Patch22: rpm-4.4.2-vercmp.patch
License: GPL
Conflicts: patch < 2.5
%ifos linux
@ -168,7 +171,7 @@ shell-like rules.
%patch9 -p1 -b .contextverify
%patch10 -p1 -b .charset
%patch11 -p1 -b .ghostconflicts
%patch12 -p1 -b .exclude
#patch12 -p1 -b .exclude
%patch13 -p1 -b .excludedsize
%patch14 -p1 -b .cronpath
%patch15 -p1 -b .mono
@ -176,6 +179,9 @@ shell-like rules.
%patch17 -p1 -b .no_large_mmap
%patch18 -p1 -b .perlmainprov
%patch19 -p1 -b .deadlock
%patch20 -p1 -b .netsharedpath
%patch21 -p1 -b .userlock
%patch22 -p1 -b .vercmp
%build
@ -568,6 +574,12 @@ exit 0
%{__includedir}/popt.h
%changelog
* Fri Mar 31 2006 Paul Nasrat <pnasrat@redhat.com> - 4.4.2-16
- Skipdirs on erase again (#187308)
- Make fcntl lock sensitive to --root (#151255)
- Fix netshared path comparison (#52725)
- Fix rpm vercmp (#178798)
* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 4.4.2-15.2
- bump again for double-long bug on ppc(64)