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