diff --git a/lib/poptALL.c b/lib/poptALL.c index 4cf82ea05..f59685c9d 100644 --- a/lib/poptALL.c +++ b/lib/poptALL.c @@ -292,7 +292,7 @@ rpmcliFini(poptContext optCon) poptContext rpmcliInit(int argc, char *const argv[], struct poptOption * optionsTable) { - poptContext optCon; + poptContext optCon = NULL; int rc; const char *ctx, *execPath; @@ -332,14 +332,14 @@ rpmcliInit(int argc, char *const argv[], struct poptOption * optionsTable) while ((rc = poptGetNextOpt(optCon)) > 0) { fprintf(stderr, _("%s: option table misconfigured (%d)\n"), xgetprogname(), rc); - exit(EXIT_FAILURE); + goto err; } if (rc < -1) { fprintf(stderr, "%s: %s: %s\n", xgetprogname(), poptBadOption(optCon, POPT_BADOPTION_NOALIAS), poptStrerror(rc)); - exit(EXIT_FAILURE); + goto err; } /* Read rpm configuration (if not already read). */ @@ -351,4 +351,9 @@ rpmcliInit(int argc, char *const argv[], struct poptOption * optionsTable) } return optCon; + +err: + poptFreeContext(optCon); + exit(EXIT_FAILURE); + return NULL; /* not reached */ } diff --git a/tests/rpmgeneral.at b/tests/rpmgeneral.at index 4b001c8e2..7378b6a7a 100644 --- a/tests/rpmgeneral.at +++ b/tests/rpmgeneral.at @@ -26,7 +26,6 @@ RPMTEST_CHECK([runroot rpm --version],[0], ]) RPMTEST_CLEANUP - # ------------------------------ AT_SETUP([rpmbuild --version]) AT_KEYWORDS([basic]) @@ -35,6 +34,15 @@ RPMTEST_CHECK([runroot rpmbuild --version],[0], ]) RPMTEST_CLEANUP +AT_SETUP([rpm invalid option]) +AT_KEYWORDS([basic]) +RPMTEST_CHECK([runroot rpm --badopt], +[1], +[], +[rpm: --badopt: unknown option +]) +RPMTEST_CLEANUP + # Check that libtool versioning matches expectations, it's easy to screw up. AT_SETUP([rpm library version]) AT_KEYWORDS([basic])