RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  [EMAIL PROTECTED]
  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;
   
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to