Merged update from upstream sources
This is an automated DistroBaker update from upstream sources. If you do not know what this is about or would like to opt out, contact the OSCI team. Source: https://src.fedoraproject.org/rpms/popt.git#6b1c26797a491a0805ffdb977c92108edaf10b5f
This commit is contained in:
parent
8e5a0313a5
commit
35141b7d43
@ -1,71 +0,0 @@
|
||||
Patch by Panu Matilainen <pmatilai@redhat.com> for popt <= 1.16 which kludges
|
||||
poptBadOption() to return something semi-meaningful on exec alias fail:
|
||||
|
||||
- poptBadOption() is totally unaware of exec alias failures, and will return
|
||||
either the first argument or last option, giving wonderfully misleading error
|
||||
messages (#697435, #710267).
|
||||
- Remember execvp() first argument on failure and return that from
|
||||
poptBadOption() if present to give the user a reasonable clue what exactly
|
||||
went wrong.
|
||||
|
||||
This patch was proposed to upstream: http://rpm5.org/community/popt-devel/0264.html
|
||||
|
||||
--- popt-1.16/popt.c 2010-01-19 01:39:10.000000000 +0100
|
||||
+++ popt-1.16/popt.c.execfail 2013-11-24 15:50:06.000000000 +0100
|
||||
@@ -192,6 +192,7 @@
|
||||
con->flags = flags;
|
||||
con->execs = NULL;
|
||||
con->numExecs = 0;
|
||||
+ con->execFail = NULL;
|
||||
con->finalArgvAlloced = argc * 2;
|
||||
con->finalArgv = calloc( (size_t)con->finalArgvAlloced, sizeof(*con->finalArgv) );
|
||||
con->execAbsolute = 1;
|
||||
@@ -236,6 +237,7 @@
|
||||
con->nextLeftover = 0;
|
||||
con->restLeftover = 0;
|
||||
con->doExec = NULL;
|
||||
+ con->execFail = _free(con->execFail);
|
||||
|
||||
if (con->finalArgv != NULL)
|
||||
for (i = 0; i < con->finalArgvCount; i++) {
|
||||
@@ -564,6 +566,7 @@
|
||||
/*@-nullstate@*/
|
||||
rc = execvp(argv[0], (char *const *)argv);
|
||||
/*@=nullstate@*/
|
||||
+ con->execFail = xstrdup(argv[0]);
|
||||
|
||||
exit:
|
||||
if (argv) {
|
||||
@@ -1697,11 +1700,19 @@
|
||||
const char * poptBadOption(poptContext con, unsigned int flags)
|
||||
{
|
||||
struct optionStackEntry * os = NULL;
|
||||
+ const char *badOpt = NULL;
|
||||
|
||||
- if (con != NULL)
|
||||
- os = (flags & POPT_BADOPTION_NOALIAS) ? con->optionStack : con->os;
|
||||
+ if (con != NULL) {
|
||||
+ /* Stupid hack to return something semi-meaningful from exec failure */
|
||||
+ if (con->execFail) {
|
||||
+ badOpt = con->execFail;
|
||||
+ } else {
|
||||
+ os = (flags & POPT_BADOPTION_NOALIAS) ? con->optionStack : con->os;
|
||||
+ badOpt = os->argv[os->next - 1];
|
||||
+ }
|
||||
+ }
|
||||
|
||||
- return (os != NULL && os->argv != NULL ? os->argv[os->next - 1] : NULL);
|
||||
+ return badOpt;
|
||||
}
|
||||
|
||||
const char * poptStrerror(const int error)
|
||||
--- popt-1.16/poptint.h 2010-01-19 01:39:10.000000000 +0100
|
||||
+++ popt-1.16/poptint.h.execfail 2013-11-24 15:50:38.000000000 +0100
|
||||
@@ -132,6 +132,7 @@
|
||||
/*@owned@*/ /*@null@*/
|
||||
poptItem execs;
|
||||
int numExecs;
|
||||
+ char * execFail;
|
||||
/*@only@*/ /*@null@*/
|
||||
poptArgv finalArgv;
|
||||
int finalArgvCount;
|
@ -1,24 +0,0 @@
|
||||
Backport of upstream http://rpm5.org/cvs/chngview?cn=19258
|
||||
|
||||
--- popt-1.16/poptconfig.c 2009-05-20 15:18:07.000000000 +0200
|
||||
+++ popt-1.16/poptconfig.c.glob-error 2017-10-12 23:33:28.868435647 +0200
|
||||
@@ -108,7 +108,7 @@
|
||||
if (glob_pattern_p(pat, 0)) {
|
||||
glob_t _g, *pglob = &_g;
|
||||
|
||||
- if (!glob(pat, poptGlobFlags, poptGlob_error, pglob)) {
|
||||
+ if (!(rc = glob(pat, poptGlobFlags, poptGlob_error, pglob))) {
|
||||
if (acp) {
|
||||
*acp = (int) pglob->gl_pathc;
|
||||
pglob->gl_pathc = 0;
|
||||
@@ -122,6 +122,10 @@
|
||||
/*@-nullstate@*/
|
||||
globfree(pglob);
|
||||
/*@=nullstate@*/
|
||||
+ } else if (rc == GLOB_NOMATCH) {
|
||||
+ *avp = NULL;
|
||||
+ *acp = 0;
|
||||
+ rc = 0;
|
||||
} else
|
||||
rc = POPT_ERROR_ERRNO;
|
||||
} else
|
@ -1,107 +0,0 @@
|
||||
Patch initially by Miloslav Trmač <mitr@redhat.com> and revised by Akira Tagoh
|
||||
<tagoh@redhat.com> for popt <= 1.16 which fixes the problem that help messages
|
||||
for --help and --usage seem not translatable. There already was some i18n support
|
||||
for autohelp in popt.c, but not in popthelp.c, where it actually matters.
|
||||
|
||||
See https://bugzilla.redhat.com/show_bug.cgi?id=734434 for further details, please.
|
||||
|
||||
This patch was proposed to upstream: http://rpm5.org/community/popt-devel/0287.html
|
||||
|
||||
--- popt-1.16/popthelp.c 2009-08-28 09:06:33.000000000 +0900
|
||||
+++ popt-1.16/popthelp.c.help 2014-01-08 12:04:00.888260244 +0900
|
||||
@@ -89,7 +89,7 @@ static struct poptOption poptHelpOptions
|
||||
{ "defaults", '\0', POPT_ARG_NONE, &show_option_defaults, 0,
|
||||
N_("Display option defaults in message"), NULL },
|
||||
#endif
|
||||
- { "", '\0', 0, NULL, 0, N_("Terminate options"), NULL },
|
||||
+ { NULL, '\0', 0, NULL, 0, N_("Terminate options"), NULL },
|
||||
POPT_TABLEEND
|
||||
} ;
|
||||
|
||||
@@ -527,8 +527,11 @@ static size_t maxArgWidth(const struct p
|
||||
if (opt != NULL)
|
||||
while (opt->longName || opt->shortName || opt->arg) {
|
||||
if (poptArgType(opt) == POPT_ARG_INCLUDE_TABLE) {
|
||||
- if (opt->arg) /* XXX program error */
|
||||
- len = maxArgWidth(opt->arg, translation_domain);
|
||||
+ void * arg = opt->arg;
|
||||
+ /* XXX sick hack to preserve pretense of ABI. */
|
||||
+ if (arg == poptHelpOptions) arg = poptHelpOptionsI18N;
|
||||
+ if (arg) /* XXX program error */
|
||||
+ len = maxArgWidth(arg, translation_domain);
|
||||
if (len > max) max = len;
|
||||
} else if (!F_ISSET(opt, DOC_HIDDEN)) {
|
||||
len = sizeof(" ")-1;
|
||||
@@ -619,19 +622,22 @@ static void singleTableHelp(poptContext
|
||||
|
||||
if (table != NULL)
|
||||
for (opt = table; opt->longName || opt->shortName || opt->arg; opt++) {
|
||||
+ void * arg = opt->arg;
|
||||
if (poptArgType(opt) != POPT_ARG_INCLUDE_TABLE)
|
||||
continue;
|
||||
- sub_transdom = getTableTranslationDomain(opt->arg);
|
||||
+ /* XXX sick hack to preserve pretense of ABI. */
|
||||
+ if (arg == poptHelpOptions) arg = poptHelpOptionsI18N;
|
||||
+ sub_transdom = getTableTranslationDomain(arg);
|
||||
if (sub_transdom == NULL)
|
||||
sub_transdom = translation_domain;
|
||||
|
||||
/* If no popt aliases/execs, skip poptAliasOption processing. */
|
||||
- if (opt->arg == poptAliasOptions && !(con->numAliases || con->numExecs))
|
||||
+ if (arg == poptAliasOptions && !(con->numAliases || con->numExecs))
|
||||
continue;
|
||||
if (opt->descrip)
|
||||
xx = POPT_fprintf(fp, "\n%s\n", D_(sub_transdom, opt->descrip));
|
||||
|
||||
- singleTableHelp(con, fp, opt->arg, columns, sub_transdom);
|
||||
+ singleTableHelp(con, fp, arg, columns, sub_transdom);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -808,22 +814,25 @@ static size_t singleTableUsage(poptConte
|
||||
translation_domain = (const char *)opt->arg;
|
||||
} else
|
||||
if (poptArgType(opt) == POPT_ARG_INCLUDE_TABLE) {
|
||||
+ void * arg = opt->arg;
|
||||
+ /* XXX sick hack to preserve pretense of ABI. */
|
||||
+ if (arg == poptHelpOptions) arg = poptHelpOptionsI18N;
|
||||
if (done) {
|
||||
int i = 0;
|
||||
if (done->opts != NULL)
|
||||
for (i = 0; i < done->nopts; i++) {
|
||||
const void * that = done->opts[i];
|
||||
- if (that == NULL || that != opt->arg)
|
||||
+ if (that == NULL || that != arg)
|
||||
/*@innercontinue@*/ continue;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
/* Skip if this table has already been processed. */
|
||||
- if (opt->arg == NULL || i < done->nopts)
|
||||
+ if (arg == NULL || i < done->nopts)
|
||||
continue;
|
||||
if (done->opts != NULL && done->nopts < done->maxopts)
|
||||
- done->opts[done->nopts++] = (const void *) opt->arg;
|
||||
+ done->opts[done->nopts++] = (const void *) arg;
|
||||
}
|
||||
- columns->cur = singleTableUsage(con, fp, columns, opt->arg,
|
||||
+ columns->cur = singleTableUsage(con, fp, columns, arg,
|
||||
translation_domain, done);
|
||||
} else
|
||||
if ((opt->longName || opt->shortName) && !F_ISSET(opt, DOC_HIDDEN)) {
|
||||
@@ -864,9 +873,13 @@ static size_t showShortOptions(const str
|
||||
if (!strchr(s, opt->shortName) && isprint((int)opt->shortName)
|
||||
&& opt->shortName != ' ')
|
||||
s[strlen(s)] = opt->shortName;
|
||||
- } else if (poptArgType(opt) == POPT_ARG_INCLUDE_TABLE)
|
||||
- if (opt->arg) /* XXX program error */
|
||||
- len = showShortOptions(opt->arg, fp, s);
|
||||
+ } else if (poptArgType(opt) == POPT_ARG_INCLUDE_TABLE) {
|
||||
+ void * arg = opt->arg;
|
||||
+ /* XXX sick hack to preserve pretense of ABI. */
|
||||
+ if (arg == poptHelpOptions) arg = poptHelpOptionsI18N;
|
||||
+ if (arg) /* XXX program error */
|
||||
+ len = showShortOptions(arg, fp, s);
|
||||
+ }
|
||||
}
|
||||
|
||||
/* On return to top level, print the short options, return print length. */
|
@ -1,66 +0,0 @@
|
||||
Patch by John Bradshaw <john@johnbradshaw.org> for popt <= 1.16 which fixes some
|
||||
spelling mistakes in popt man page.
|
||||
|
||||
See https://bugzilla.redhat.com/show_bug.cgi?id=675567 for further details, please.
|
||||
This patch was proposed to upstream: http://rpm5.org/community/popt-devel/0263.html
|
||||
|
||||
Upstream already corrected some issues with http://rpm5.org/cvs/chngview?cn=16879
|
||||
and solved the last ones with http://rpm5.org/cvs/chngview?cn=17375 now. Thus popt
|
||||
1.17 should make this patch completely obsolete.
|
||||
|
||||
--- popt-1.16/popt.3 2009-07-25 20:52:36.000000000 +0200
|
||||
+++ popt-1.16/popt.3.man-page 2013-11-24 15:59:58.000000000 +0100
|
||||
@@ -200,7 +200,7 @@
|
||||
.RB "This macro includes another option table (via " POPT_ARG_INCLUDE_TABLE
|
||||
; see below) in the main one which provides the table entries for these
|
||||
.RB "arguments. When " --usage " or " --help " are passed to programs which
|
||||
-use popt's automatical help, popt displays the appropriate message on
|
||||
+use popt's automatic help, popt displays the appropriate message on
|
||||
stderr as soon as it finds the option, and exits the program with a
|
||||
return code of 0. If you want to use popt's automatic help generation in
|
||||
a different way, you need to explicitly add the option entries to your programs
|
||||
@@ -210,7 +210,7 @@
|
||||
the argument will not be shown in help output.
|
||||
.sp
|
||||
If the \fIargInfo\fR value is bitwise or'd with \fBPOPT_ARGFLAG_SHOW_DEFAULT\fR,
|
||||
-the inital value of the arg will be shown in help output.
|
||||
+the initial value of the arg will be shown in help output.
|
||||
.sp
|
||||
The final structure in the table should have all the pointer values set
|
||||
.RB "to " NULL " and all the arithmetic values set to 0, marking the "
|
||||
@@ -233,7 +233,7 @@
|
||||
contain a overall description of the option table being included.
|
||||
.sp
|
||||
The other special option table entry type tells popt to call a function (a
|
||||
-callback) when any option in that table is found. This is especially usefull
|
||||
+callback) when any option in that table is found. This is especially useful
|
||||
when included option tables are being used, as the program which provides
|
||||
the top-level option table doesn't need to be aware of the other options
|
||||
which are provided by the included table. When a callback is set for
|
||||
@@ -473,7 +473,7 @@
|
||||
.TP
|
||||
.B POPT_ERROR_BADNUMBER
|
||||
A conversion from a string to a number (int or long) failed due
|
||||
-to the string containing nonnumeric characters. This occurs when
|
||||
+to the string containing non-numeric characters. This occurs when
|
||||
.BR poptGetNextOpt() " is processing an argument of type "
|
||||
.BR POPT_ARG_INT ", " POPT_ARG_SHORT ", " POPT_ARG_LONG ", " POPT_ARG_LONGLONG ", "
|
||||
.RB POPT_ARG_FLOAT ", or " POPT_ARG_DOUBLE "."
|
||||
@@ -517,7 +517,7 @@
|
||||
applications. When an error is detected from most of the functions,
|
||||
an error message is printed along with the error string from
|
||||
.BR poptStrerror() ". When an error occurs during argument parsing, "
|
||||
-code similiar to the following displays a useful error message:
|
||||
+code similar to the following displays a useful error message:
|
||||
.sp
|
||||
.nf
|
||||
fprintf(stderr, "%s: %s\\n",
|
||||
@@ -608,7 +608,7 @@
|
||||
.RI "an " argv "-style array, some programs need to parse strings that "
|
||||
are formatted identically to command lines. To facilitate this, popt
|
||||
provides a function that parses a string into an array of strings,
|
||||
-using rules similiar to normal shell parsing.
|
||||
+using rules similar to normal shell parsing.
|
||||
.sp
|
||||
.nf
|
||||
.B "#include <popt.h>"
|
@ -1,79 +0,0 @@
|
||||
From 6fcb24d785a2c2d626bac6999aee6b3ab368be15 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Fri, 28 Jul 2017 16:11:40 -0400
|
||||
Subject: [PATCH] Don't leak the last argument expanded by expandNextArg()
|
||||
|
||||
While using POPT_ARG_ARGV, I noticed this in valgrind's leak checker:
|
||||
|
||||
==1738== HEAP SUMMARY:
|
||||
==1738== in use at exit: 8 bytes in 1 blocks
|
||||
==1738== total heap usage: 94 allocs, 93 frees, 42,319 bytes allocated
|
||||
==1738==
|
||||
==1738== 8 bytes in 1 blocks are definitely lost in loss record 1 of 1
|
||||
==1738== at 0x4C2EB6B: malloc (vg_replace_malloc.c:299)
|
||||
==1738== by 0x4E3DF47: expandNextArg (popt.c:699)
|
||||
==1738== by 0x4E3F681: poptGetNextOpt (popt.c:1501)
|
||||
==1738== by 0x401F72: main (bingrep.c:433)
|
||||
==1738==
|
||||
==1738== LEAK SUMMARY:
|
||||
==1738== definitely lost: 8 bytes in 1 blocks
|
||||
==1738== indirectly lost: 0 bytes in 0 blocks
|
||||
==1738== possibly lost: 0 bytes in 0 blocks
|
||||
==1738== still reachable: 0 bytes in 0 blocks
|
||||
==1738== suppressed: 0 bytes in 0 blocks
|
||||
|
||||
My command line argument is a 7-byte string, and on first glance, it
|
||||
appears this is because both expandNextArg() and poptSaveString()
|
||||
duplicate the string. The copy from poptSaveString() is the consuming
|
||||
program's responsibility to free, but the intermediate pointer is popt's
|
||||
responsibility.
|
||||
|
||||
Upon further examination, it appears popt normally does free this
|
||||
string, but it only does it on the next entry to poptGetNextOpt(), and
|
||||
on cleanOSE() in the case if we're not already at the bottom of
|
||||
con->OptionStack.
|
||||
|
||||
This patch modifies poptResetContext() to ensure we'll always attempt to
|
||||
free con->os->nextArg regardless of our position in the OptionStack, and
|
||||
removes the duplicate free of con->os->argb in poptFreeContext(), as
|
||||
it's called unconditionally by the poptResetContext() call on the
|
||||
previous line.
|
||||
|
||||
This ensures that if poptGetNextOpt() isn't re-intered, poptFreeContext()
|
||||
will free the memory that was allocated. Now valgrind tells me:
|
||||
|
||||
==31734== HEAP SUMMARY:
|
||||
==31734== in use at exit: 0 bytes in 0 blocks
|
||||
==31734== total heap usage: 94 allocs, 94 frees, 42,319 bytes allocated
|
||||
==31734==
|
||||
==31734== All heap blocks were freed -- no leaks are possible
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
popt.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/popt.c b/popt.c
|
||||
index 1a53f40..72fbf5c 100644
|
||||
--- a/popt.c
|
||||
+++ b/popt.c
|
||||
@@ -230,7 +230,7 @@ void poptResetContext(poptContext con)
|
||||
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;
|
||||
@@ -1617,7 +1617,6 @@ poptContext poptFreeContext(poptContext con)
|
||||
{
|
||||
if (con == NULL) return con;
|
||||
poptResetContext(con);
|
||||
- con->os->argb = _free(con->os->argb);
|
||||
|
||||
con->aliases = poptFreeItems(con->aliases, con->numAliases);
|
||||
con->numAliases = 0;
|
||||
--
|
||||
2.13.3
|
||||
|
@ -1,31 +0,0 @@
|
||||
Patch by Robert Scheck <robert@fedoraproject.org> for popt <= 1.16 which changes
|
||||
$(pkgconfigdir) on 64 bit systems from /usr/lib/pkgconfig to /usr/lib64/pkgconfig.
|
||||
Using $(libdir)/pkgconfig rather $(prefix)/lib/pkgconfig seems to be common when
|
||||
searching on the Internet. This patch however is not really compliant with Fedora
|
||||
/%{_lib} vs. %{_libdir} handling before the UsrMove with Fedora 17. Alternatively
|
||||
--with-pkgconfigdir or similar should be implemented.
|
||||
|
||||
This patch was proposed to upstream: http://rpm5.org/community/popt-devel/0265.html
|
||||
|
||||
--- popt-1.16/Makefile.in 2010-05-04 22:55:59.000000000 +0200
|
||||
+++ popt-1.16/Makefile.in.pkgconfig 2013-11-24 15:06:43.000000000 +0100
|
||||
@@ -370,7 +370,7 @@
|
||||
libpopt_la_SOURCES = popt.c poptparse.c poptconfig.c popthelp.c poptint.c
|
||||
libpopt_la_LDFLAGS = -no-undefined @LTLIBINTL@ @LTLIBICONV@ \
|
||||
$(am__append_1)
|
||||
-pkgconfigdir = $(prefix)/lib/pkgconfig
|
||||
+pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = popt.pc
|
||||
man_MANS = popt.3
|
||||
BUILT_SOURCES = popt.pc # popt.lcd
|
||||
--- popt-1.16/Makefile.am 2010-05-04 22:55:54.000000000 +0200
|
||||
+++ popt-1.16/Makefile.am.pkgconfig 2013-11-24 15:02:21.000000000 +0100
|
||||
@@ -47,7 +47,7 @@
|
||||
libpopt_la_SOURCES = popt.c poptparse.c poptconfig.c popthelp.c poptint.c
|
||||
libpopt_la_LDFLAGS = -no-undefined @LTLIBINTL@ @LTLIBICONV@
|
||||
|
||||
-pkgconfigdir = $(prefix)/lib/pkgconfig
|
||||
+pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = popt.pc
|
||||
|
||||
if HAVE_LD_VERSION_SCRIPT
|
12
popt.spec
12
popt.spec
@ -8,8 +8,9 @@ Version: %{ver}%{?snap:~%{snap}}
|
||||
Release: 2%{?dist}
|
||||
License: MIT
|
||||
URL: https://github.com/rpm-software-management/popt/
|
||||
Source: http://ftp.rpm.org/popt/releases/popt-1.1x/%{name}-%{srcver}.tar.gz
|
||||
BuildRequires: gcc gettext
|
||||
Source0: http://ftp.rpm.org/popt/releases/popt-1.x/%{name}-%{srcver}.tar.gz
|
||||
BuildRequires: gcc
|
||||
BuildRequires: gettext
|
||||
|
||||
%description
|
||||
Popt is a C library for parsing command line parameters. Popt was
|
||||
@ -48,10 +49,11 @@ Install it if you need to link statically with libpopt.
|
||||
%install
|
||||
%make_install
|
||||
|
||||
rm -f $RPM_BUILD_ROOT/%{_libdir}/libpopt.la
|
||||
# Don't install any libtool .la files
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/libpopt.la
|
||||
|
||||
# Multiple popt configurations are possible
|
||||
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/popt.d
|
||||
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/popt.d/
|
||||
|
||||
%find_lang %{name}
|
||||
|
||||
@ -63,7 +65,7 @@ make check
|
||||
%files -f %{name}.lang
|
||||
%license COPYING
|
||||
%doc CHANGES
|
||||
%{_sysconfdir}/popt.d
|
||||
%{_sysconfdir}/popt.d/
|
||||
%{_libdir}/libpopt.so.*
|
||||
|
||||
%files devel
|
||||
|
Loading…
Reference in New Issue
Block a user