RPM Package Manager, CVS Repository
http://rpm5.org/cvs/
____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson
Root: /v/rpm/cvs Email: jbj@rpm5.org
Module: rpm Date: 11-Oct-2007 16:45:39
Branch: HEAD Handle: 2007101115453801
Modified files:
rpm CHANGES
rpm/rpmdb header.c
Log:
- fix: headerGetExtension failed to return p.str correctly.
Summary:
Revision Changes Path
1.1665 +1 -0 rpm/CHANGES
1.71 +11 -4 rpm/rpmdb/header.c
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.1664 -r1.1665 CHANGES
--- rpm/CHANGES 11 Oct 2007 13:04:25 -0000 1.1664
+++ rpm/CHANGES 11 Oct 2007 14:45:38 -0000 1.1665
@@ -1,4 +1,5 @@
4.5 -> 5.0:
+ - jbj: fix: headerGetExtension failed to return p.str correctly.
- jbj: start eliminating rpmError.
- jbj: fail empty and non-printable manifests.
- jbj: headerGetExtension: handle lookup failure cases too.
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/header.c
============================================================================
$ cvs diff -u -r1.70 -r1.71 header.c
--- rpm/rpmdb/header.c 8 Oct 2007 06:50:02 -0000 1.70
+++ rpm/rpmdb/header.c 11 Oct 2007 14:45:39 -0000 1.71
@@ -1853,7 +1853,9 @@
else
rc = intGetEntry(h, he->tag, he->t, (hPTR_t *)he->p, he->c, 0);
- if (rc && he->p && !he->freeData)
+ if (!rc)
+ goto exit;
+
switch (*he->t) {
case RPM_NULL_TYPE:
case RPM_OPENPGP_TYPE: /* XXX W2DO? */
@@ -1886,12 +1888,17 @@
break;
}
- if (rc && p)
- p->ptr = ((nb > 0)
- ? memcpy(xmalloc(nb), he_p.ptr, nb) : he_p.ptr);
+ /* Allocate all returned storage (if not already). */
+ if (p && nb && !he->freeData) {
+ void * ptr = memcpy(xmalloc(nb), he_p.ptr, nb);
+ he_p.ptr = ptr;
+ }
+exit:
if (type)
*type = *he->t;
+ if (p)
+ p->ptr = he_p.ptr;
if (c)
*c = *he->c;
@@ .
Received on Thu Oct 11 16:45:39 2007