RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: popt Date: 27-Jun-2016 05:00:40 Branch: HEAD Handle: 2016062703004000 Modified files: popt CHANGES popt.c poptconfig.c poptint.h Log: - fix: free con->os->nextArg when used (memory leaks). - enable SUPPORT_GLOBAL_CALCULATOR. - revert to SUPPORT_CONTIGUOUS_ARGV: alias/exec have memroy leaks. - add poptGlob_pattern_p() always (portability). Summary: Revision Changes Path 1.200 +4 -0 popt/CHANGES 1.166 +12 -13 popt/popt.c 1.67 +2 -4 popt/poptconfig.c 1.47 +3 -0 popt/poptint.h ____________________________________________________________________________ patch -p0 <<'@@ .' Index: popt/CHANGES ============================================================================ $ cvs diff -u -r1.199 -r1.200 CHANGES --- popt/CHANGES 24 Jun 2016 19:04:19 -0000 1.199 +++ popt/CHANGES 27 Jun 2016 03:00:40 -0000 1.200 @@ -1,4 +1,8 @@ 1.17 -> 2.0: + - jbj: fix: free con->os->nextArg when used (memory leaks). + - jbj: enable SUPPORT_GLOBAL_CALCULATOR. + - jbj: revert to SUPPORT_CONTIGUOUS_ARGV: alias/exec have memroy leaks. + - jbj: add poptGlob_pattern_p() always (portability). - jbj: use poptArgvFree to avoid memory leaks. - jbj: i18n: update PO files (Translation Project). - jbj: i18n: update PO files (Translation Project). @@ . patch -p0 <<'@@ .' Index: popt/popt.c ============================================================================ $ cvs diff -u -r1.165 -r1.166 popt.c --- popt/popt.c 24 Jun 2016 19:04:19 -0000 1.165 +++ popt/popt.c 27 Jun 2016 03:00:40 -0000 1.166 @@ -254,7 +254,7 @@ con->os->argb = PBM_FREE(con->os->argb); con->os->currAlias = NULL; con->os->nextCharArg = NULL; - con->os->nextArg = NULL; + con->os->nextArg = _free(con->os->nextArg); con->os->next = 1; /* skip argv[0] */ con->numLeftovers = 0; @@ -733,13 +733,11 @@ /*@modifies con @*/ { const char * a = NULL; - char *t, *te; size_t tn = strlen(s) + 1; + char *t = (char*) xmalloc(tn); + char *te = t; char c; - te = t = (char*) xmalloc(tn); -assert(t); /* XXX can't happen */ - if (t == NULL) return NULL; *t = '\0'; while ((c = *s++) != '\0') { switch (c) { @@ -760,9 +758,8 @@ tn += strlen(a); { size_t pos = (size_t) (te - t); - /* cppcheck-suppress memleakOnRealloc */ - t = (char*) xrealloc(t, tn); -assert(t); /* XXX can't happen */ + /* cppcheck-suppress memleakOnRealloc */ + t = (char*) xrealloc(t, tn); if (t == NULL) return NULL; te = stpcpy(t + pos, a); @@ -778,7 +775,7 @@ /* If the new string is longer than needed, shorten. */ if ((t + tn) > te) { /*@-usereleased@*/ /* XXX splint can't follow the pointers. */ - if ((te = (char*) xrealloc(t, (size_t)(te - t))) == NULL) + if ((te = (char*) xrealloc(t, (size_t)(te - t))) == NULL) free(t); t = te; /*@=usereleased@*/ @@ -1311,16 +1308,16 @@ switch (poptArgType(opt)) { case POPT_ARG_BITSET: - /* XXX memory leak, application is responsible for free. */ rc = poptSaveBits(arg.ptr, opt->argInfo, con->os->nextArg); +con->os->nextArg = _free(con->os->nextArg); /*@switchbreak@*/ break; case POPT_ARG_ARGV: - /* XXX memory leak, application is responsible for free. */ rc = poptSaveString(arg.ptr, opt->argInfo, con->os->nextArg); +con->os->nextArg = _free(con->os->nextArg); /*@switchbreak@*/ break; case POPT_ARG_STRING: - /* XXX memory leak, application is responsible for free. */ - arg.argv[0] = (con->os->nextArg) ? xstrdup(con->os->nextArg) : NULL; + arg.argv[0] = con->os->nextArg; +con->os->nextArg = NULL; /*@switchbreak@*/ break; case POPT_ARG_LONGLONG: @@ -1390,6 +1387,7 @@ arg.shortp[0] = (short) aNUM; /*@innerbreak@*/ break; } +con->os->nextArg = _free(con->os->nextArg); } /*@switchbreak@*/ break; case POPT_ARG_FLOAT: @@ -1431,6 +1429,7 @@ arg.floatp[0] = (float) aDouble; /*@innerbreak@*/ break; } +con->os->nextArg = _free(con->os->nextArg); } /*@switchbreak@*/ break; case POPT_ARG_MAINCALL: /*@-assignexpose -type@*/ @@ . patch -p0 <<'@@ .' Index: popt/poptconfig.c ============================================================================ $ cvs diff -u -r1.66 -r1.67 poptconfig.c --- popt/poptconfig.c 8 Jan 2014 16:18:03 -0000 1.66 +++ popt/poptconfig.c 27 Jun 2016 03:00:40 -0000 1.67 @@ -42,11 +42,10 @@ /*@=declundef =exportheader =incondefs =protoparammatch =redecl =type @*/ #endif /* __LCLINT__ */ -#if !defined(__GLIBC__) /* Return nonzero if PATTERN contains any metacharacters. Metacharacters can be quoted with backslashes if QUOTE is nonzero. */ static int -glob_pattern_p (const char * pattern, int quote) +poptGlob_pattern_p (const char * pattern, int quote) /*@*/ { const char * p; @@ -72,7 +71,6 @@ } return 0; } -#endif /* !defined(__GLIBC__) */ #if defined(HAVE_ASSERT_H) #include <assert.h> @@ -111,7 +109,7 @@ pat++; #if defined(HAVE_GLOB_H) - if (glob_pattern_p(pat, 0)) { + if (poptGlob_pattern_p(pat, 0)) { glob_t _g, *pglob = &_g; if (!glob(pat, poptGlobFlags, poptGlob_error, pglob)) { @@ . patch -p0 <<'@@ .' Index: popt/poptint.h ============================================================================ $ cvs diff -u -r1.46 -r1.47 poptint.h --- popt/poptint.h 18 Jun 2010 01:37:21 -0000 1.46 +++ popt/poptint.h 27 Jun 2016 03:00:40 -0000 1.47 @@ -11,6 +11,9 @@ #include <stdint.h> +#define SUPPORT_GLOBAL_CALCULATOR 1 +#define SUPPORT_CONTIGUOUS_ARGV 1 + /** * Wrapper to free(3), hides const compilation noise, permit NULL, return NULL. * @param p memory to free @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org