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

  Server: rpm5.org                         Name:   Ralf S. Engelschall
  Root:   /v/rpm/cvs                       Email:  [EMAIL PROTECTED]
  Module: rpm                              Date:   19-Jul-2007 08:14:54
  Branch: HEAD                             Handle: 2007071907145400

  Modified files:
    rpm/lib                 psm.c

  Log:
    Plug a memory leak and/or avoid segfaults by freeing the correct buffer
    as dirname(3) on some platforms return a pointer to internal storage
    space allocated on the first call that will be overwritten by subsequent
    calls while on other platforms it may just modify the contents of the
    string passed to it in-place.

  Summary:
    Revision    Changes     Path
    2.210       +4  -2      rpm/lib/psm.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/lib/psm.c
  ============================================================================
  $ cvs diff -u -r2.209 -r2.210 psm.c
  --- rpm/lib/psm.c     18 Jul 2007 12:56:03 -0000      2.209
  +++ rpm/lib/psm.c     19 Jul 2007 06:14:54 -0000      2.210
  @@ -1682,6 +1682,7 @@
            /* Open output package for writing. */
            {   char tiddn[32];
                const char * bfmt;
  +             const char * pkgdn_buf;
                const char * pkgdn;
                const char * pkgbn;
   
  @@ -1695,9 +1696,10 @@
                                        pkgbn);
                pkgbn = _free(pkgbn);
                (void) urlPath(psm->pkgURL, &psm->pkgfn);
  -             pkgdn = dirname(xstrdup(psm->pkgfn));
  +             pkgdn_buf = xstrdup(psm->pkgfn);
  +             pkgdn = dirname(pkgdn_buf);
                rc = rpmMkdirPath(pkgdn, "_repackage_dir");
  -             pkgdn = _free(pkgdn);
  +             pkgdn_buf = _free(pkgdn_buf);
                if (rc == RPMRC_FAIL)
                    break;
                psm->fd = Fopen(psm->pkgfn, "w.fdio");
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to