- Hack poptBadOption() to return something semi-meaningful on exec alias
failures (#697435, #710267)
This commit is contained in:
		
							parent
							
								
									f3d7f8c4f4
								
							
						
					
					
						commit
						69ee8930bc
					
				
							
								
								
									
										70
									
								
								popt-1.13-execfail.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								popt-1.13-execfail.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,70 @@ | |||||||
|  | Kludge 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. | ||||||
|  | 
 | ||||||
|  | diff -up popt-1.13/popt.c.execfail popt-1.13/popt.c
 | ||||||
|  | --- popt-1.13/popt.c.execfail	2012-08-02 16:08:34.762315304 +0300
 | ||||||
|  | +++ popt-1.13/popt.c	2012-08-02 16:11:41.352683721 +0300
 | ||||||
|  | @@ -186,6 +186,7 @@ poptContext poptGetContext(const char *
 | ||||||
|  |      con->flags = flags; | ||||||
|  |      con->execs = NULL; | ||||||
|  |      con->numExecs = 0; | ||||||
|  | +    con->execFail = NULL;
 | ||||||
|  |      con->finalArgvAlloced = argc * 2; | ||||||
|  |      con->finalArgv = calloc( con->finalArgvAlloced, sizeof(*con->finalArgv) ); | ||||||
|  |      con->execAbsolute = 1; | ||||||
|  | @@ -234,6 +235,7 @@ void poptResetContext(poptContext con)
 | ||||||
|  |      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++) { | ||||||
|  | @@ -468,6 +470,7 @@ if (_popt_debug)
 | ||||||
|  |  /*@-nullstate@*/ | ||||||
|  |      rc = execvp(argv[0], (char *const *)argv); | ||||||
|  |  /*@=nullstate@*/ | ||||||
|  | +    con->execFail = xstrdup(argv[0]);
 | ||||||
|  |   | ||||||
|  |  exit: | ||||||
|  |      if (argv) { | ||||||
|  | @@ -1194,11 +1197,19 @@ int poptAddItem(poptContext con, poptIte
 | ||||||
|  |  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) | ||||||
|  | diff -up popt-1.13/poptint.h.execfail popt-1.13/poptint.h
 | ||||||
|  | --- popt-1.13/poptint.h.execfail	2012-08-02 16:08:34.000000000 +0300
 | ||||||
|  | +++ popt-1.13/poptint.h	2012-08-02 16:12:35.796500122 +0300
 | ||||||
|  | @@ -78,6 +78,7 @@ struct poptContext_s {
 | ||||||
|  |  /*@owned@*/ /*@null@*/ | ||||||
|  |      poptItem execs; | ||||||
|  |      int numExecs; | ||||||
|  | +    char * execFail;
 | ||||||
|  |  /*@only@*/ /*@null@*/ | ||||||
|  |      const char ** finalArgv; | ||||||
|  |      int finalArgvCount; | ||||||
| @ -1,7 +1,7 @@ | |||||||
| Summary:	C library for parsing command line parameters | Summary:	C library for parsing command line parameters | ||||||
| Name:		popt | Name:		popt | ||||||
| Version:	1.13 | Version:	1.13 | ||||||
| Release:	11%{?dist} | Release:	12%{?dist} | ||||||
| License:	MIT | License:	MIT | ||||||
| Group:		System Environment/Libraries | Group:		System Environment/Libraries | ||||||
| URL:		http://www.rpm5.org/ | URL:		http://www.rpm5.org/ | ||||||
| @ -9,6 +9,7 @@ Source:		http://www.rpm5.org/files/%{name}/%{name}-%{version}.tar.gz | |||||||
| Patch0:		popt-1.13-multilib.patch | Patch0:		popt-1.13-multilib.patch | ||||||
| Patch1:		popt-1.13-popt_fprintf.patch | Patch1:		popt-1.13-popt_fprintf.patch | ||||||
| Patch2:		popt-1.13-alias-equal-arg.patch | Patch2:		popt-1.13-alias-equal-arg.patch | ||||||
|  | Patch3:		popt-1.13-execfail.patch | ||||||
| BuildRequires:	gettext, doxygen, graphviz | BuildRequires:	gettext, doxygen, graphviz | ||||||
| BuildRoot:	%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) | BuildRoot:	%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) | ||||||
| 
 | 
 | ||||||
| @ -46,6 +47,7 @@ Install it if you need to link statically with libpopt. | |||||||
| %patch0 -p1 -b .multilib | %patch0 -p1 -b .multilib | ||||||
| %patch1 -p1 -b .popt_fprintf | %patch1 -p1 -b .popt_fprintf | ||||||
| %patch2 -p1 -b .alias-equal-arg | %patch2 -p1 -b .alias-equal-arg | ||||||
|  | %patch3 -p1 -b .execfail | ||||||
| 
 | 
 | ||||||
| %build | %build | ||||||
| %configure --libdir=/%{_lib} | %configure --libdir=/%{_lib} | ||||||
| @ -94,6 +96,10 @@ rm -rf $RPM_BUILD_ROOT | |||||||
| %{_libdir}/libpopt.a | %{_libdir}/libpopt.a | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Thu Aug 02 2012 Panu Matilainen <pmatilai@redhat.com> - 1.13-12 | ||||||
|  | - Hack poptBadOption() to return something semi-meaningful on exec alias | ||||||
|  |   failures (#697435, #710267) | ||||||
|  | 
 | ||||||
| * Sat Jul 21 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.13-11 | * Sat Jul 21 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.13-11 | ||||||
| - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild | - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user