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: 27-Nov-2007 03:29:27 Branch: HEAD Handle: 2007112702292601 Modified files: rpm CHANGES rpm/build files.c pack.c parsePrep.c rpm/rpmdb header.c legacy.c Log: - rpmbuild: plug some memory leaks. - fix: return 0, not -1, with unsigned changes as error. Summary: Revision Changes Path 1.1893 +2 -0 rpm/CHANGES 1.298 +3 -1 rpm/build/files.c 2.258 +15 -5 rpm/build/pack.c 2.95 +6 -3 rpm/build/parsePrep.c 1.140 +12 -12 rpm/rpmdb/header.c 1.37 +3 -3 rpm/rpmdb/legacy.c ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/CHANGES ============================================================================ $ cvs diff -u -r1.1892 -r1.1893 CHANGES --- rpm/CHANGES 26 Nov 2007 06:52:52 -0000 1.1892 +++ rpm/CHANGES 27 Nov 2007 02:29:26 -0000 1.1893 @@ -1,4 +1,6 @@ 5.0a2 -> 5.0a3: + - jbj: rpmbuild: plug some memory leaks. + - jbj: fix: return 0, not -1, with unsigned changes as error. - jbj: add HEADERGET_NOEXTENSION disabler, kill off headerGetEntry. - jbj: 1 down, 2 to go, to get rid of headerGetEntry. - jbj: limit headerGetEntry usage to -lrpmdb only. @@ . patch -p0 <<'@@ .' Index: rpm/build/files.c ============================================================================ $ cvs diff -u -r1.297 -r1.298 files.c --- rpm/build/files.c 26 Nov 2007 06:15:34 -0000 1.297 +++ rpm/build/files.c 27 Nov 2007 02:29:27 -0000 1.298 @@ -1025,8 +1025,10 @@ const char *ddir, *fmt, *errstr; if (!oneshot) { _docdir_fmt = rpmExpand("%{?_docdir_fmt}", NULL); - if (!_docdir_fmt || !*_docdir_fmt) + if (!_docdir_fmt || !*_docdir_fmt) { + _docdir_fmt = _free(_docdir_fmt); _docdir_fmt = "%{NAME}-%{VERSION}"; + } oneshot = 1; } fmt = headerSprintf(pkg->header, _docdir_fmt, NULL, rpmHeaderFormats, &errstr); @@ . patch -p0 <<'@@ .' Index: rpm/build/pack.c ============================================================================ $ cvs diff -u -r2.257 -r2.258 pack.c --- rpm/build/pack.c 24 Nov 2007 23:15:31 -0000 2.257 +++ rpm/build/pack.c 27 Nov 2007 02:29:27 -0000 2.258 @@ -43,12 +43,16 @@ /[EMAIL PROTECTED] spec->sourceRpmName @*/ { if (spec->sourceRpmName == NULL) { - const char *name, *version, *release; + const char *N, *V, *R; char fileName[BUFSIZ]; - (void) headerNEVRA(spec->packages->header, &name, NULL, &version, &release, NULL); - sprintf(fileName, "%s-%s-%s.%ssrc.rpm", name, version, release, + (void) headerNEVRA(spec->packages->header, &N, NULL, &V, &R, NULL); + snprintf(fileName, sizeof(fileName), "%s-%s-%s.%ssrc.rpm", N, V, R, spec->noSource ? "no" : ""); + fileName[sizeof(fileName)-1] = '\0'; + N = _free(N); + V = _free(V); + R = _free(R); spec->sourceRpmName = xstrdup(fileName); } @@ -495,6 +499,8 @@ p += strlen(p); } (void) stpcpy( stpcpy( stpcpy(p, V) , "-") , R); + V = _free(V); + R = _free(R); /* * Rpm prior to 3.0.3 does not have versioned provides. @@ -584,6 +590,7 @@ xx = headerPut(h, he, 0); he->append = 0; } + N = _free(N); } /[EMAIL PROTECTED]@*/ @@ -687,8 +694,8 @@ /* Create and add the cookie */ if (cookie) { - sprintf(buf, "%s %d", buildHost(), (int) (*getBuildTime())); - *cookie = xstrdup(buf); + sprintf(buf, "%s %u", buildHost(), (unsigned) (*getBuildTime())); + *cookie = xstrdup(buf); /* XXX memory leak */ he->tag = RPMTAG_COOKIE; he->t = RPM_STRING_TYPE; he->p.str = *cookie; @@ -813,6 +820,9 @@ (void) headerNEVRA(h, &N, NULL, &V, &R, NULL); sprintf(buf, "%s-%s-%s", N, V, R); rc = rpmpkgWrite(item, fd, l, &msg); + N = _free(N); + V = _free(V); + R = _free(R); } if (rc != RPMRC_OK) { @@ . patch -p0 <<'@@ .' Index: rpm/build/parsePrep.c ============================================================================ $ cvs diff -u -r2.94 -r2.95 parsePrep.c --- rpm/build/parsePrep.c 26 Nov 2007 05:16:49 -0000 2.94 +++ rpm/build/parsePrep.c 27 Nov 2007 02:29:27 -0000 2.95 @@ -383,9 +383,12 @@ if (dirName) { spec->buildSubdir = xstrdup(dirName); } else { - const char *name, *version; - (void) headerNEVRA(spec->packages->header, &name, NULL, &version, NULL, NULL); - sprintf(buf, "%s-%s", name, version); + const char *N, *V; + (void) headerNEVRA(spec->packages->header, &N, NULL, &V, NULL, NULL); + snprintf(buf, sizeof(buf), "%s-%s", N, V); + buf[sizeof(buf)-1] = '\0'; + N = _free(N); + V = _free(V); spec->buildSubdir = xstrdup(buf); } addMacro(spec->macros, "buildsubdir", NULL, spec->buildSubdir, RMIL_SPEC); @@ . patch -p0 <<'@@ .' Index: rpm/rpmdb/header.c ============================================================================ $ cvs diff -u -r1.139 -r1.140 header.c --- rpm/rpmdb/header.c 26 Nov 2007 21:05:57 -0000 1.139 +++ rpm/rpmdb/header.c 27 Nov 2007 02:29:27 -0000 1.140 @@ -334,7 +334,7 @@ switch (type) { case RPM_STRING_TYPE: if (count != 1) - return -1; + return 0; while (*s++ != '\0') { if (se && s > se) return 0; @@ -349,7 +349,7 @@ if (onDisk) { while (count--) { length++; /* count nul terminator too */ - while (*s++ != '\0') { + while (*s++ != '\0') { if (se && s > se) return 0; length++; @@ -429,17 +429,17 @@ assert(ie.info.offset >= 0); /* XXX insurance */ if (hdrchkType(ie.info.type)) - return -1; + return 0; if (hdrchkData(ie.info.count)) - return -1; + return 0; if (hdrchkData(ie.info.offset)) - return -1; + return 0; if (hdrchkAlign(ie.info.type, ie.info.offset)) - return -1; + return 0; ie.data = t = dataStart + ie.info.offset; if (dataEnd && t >= dataEnd) - return -1; + return 0; p.ptr = ie.data; pend.ui8p = (uint8_t *) dataEnd; @@ -447,7 +447,7 @@ ie.length = dataLength(ie.info.type, &p, ie.info.count, 1, &pend); /[EMAIL PROTECTED]@*/ if (ie.length == 0 || hdrchkData(ie.length)) - return -1; + return 0; ie.rdlen = 0; @@ -491,7 +491,7 @@ uint32_t b[2]; for (; ie.info.count > 0; ie.info.count--, it += 1) { if (dataEnd && ((unsigned char *)it) >= dataEnd) - return -1; + return 0; b[1] = (uint32_t) htonl(((uint32_t *)it)[0]); b[0] = (uint32_t) htonl(((uint32_t *)it)[1]); if (b[1] != ((uint32_t *)it)[0]) @@ -503,7 +503,7 @@ { uint32_t * it = (uint32_t *)t; for (; ie.info.count > 0; ie.info.count--, it += 1) { if (dataEnd && ((unsigned char *)it) >= dataEnd) - return -1; + return 0; *it = (uint32_t) htonl(*it); } t = (unsigned char *) it; @@ -512,7 +512,7 @@ { uint16_t * it = (uint16_t *) t; for (; ie.info.count > 0; ie.info.count--, it += 1) { if (dataEnd && ((unsigned char *)it) >= dataEnd) - return -1; + return 0; *it = (uint16_t) htons(*it); } t = (unsigned char *) it; @@ -523,7 +523,7 @@ } dl += ie.length; - if (dataEnd && (dataStart + dl) > dataEnd) return -1; + if (dataEnd && (dataStart + dl) > dataEnd) return 0; tl += tdel; ieprev = ie; /* structure assignment */ @@ . patch -p0 <<'@@ .' Index: rpm/rpmdb/legacy.c ============================================================================ $ cvs diff -u -r1.36 -r1.37 legacy.c --- rpm/rpmdb/legacy.c 14 Nov 2007 21:13:18 -0000 1.36 +++ rpm/rpmdb/legacy.c 27 Nov 2007 02:29:27 -0000 1.37 @@ -49,12 +49,12 @@ { /[EMAIL PROTECTED]@*/ static const char * cmd = NULL; - static int initted = 0; + static int oneshot = 0; int fdno; - if (!initted) { + if (!oneshot) { cmd = rpmExpand("%{?__prelink_undo_cmd}", NULL); - initted++; + oneshot++; } if (pidp) *pidp = 0; @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org