Mailing List Archive

svn commit: r491718 - /spamassassin/trunk/spamc/getopt.c
Author: sidney
Date: Mon Jan 1 16:16:58 2007
New Revision: 491718

URL: http://svn.apache.org/viewvc?view=rev&rev=491718
Log:
bug 5266: patch to treat command line argument space in a read-only fashion

Modified:
spamassassin/trunk/spamc/getopt.c

Modified: spamassassin/trunk/spamc/getopt.c
URL: http://svn.apache.org/viewvc/spamassassin/trunk/spamc/getopt.c?view=diff&rev=491718&r1=491717&r2=491718
==============================================================================
--- spamassassin/trunk/spamc/getopt.c (original)
+++ spamassassin/trunk/spamc/getopt.c Mon Jan 1 16:16:58 2007
@@ -191,7 +191,7 @@
static int dash = 0;
char *cp, *longopt;
char *bp, *opt = NULL;
- int i;
+ int i, longoptlen;;

spamc_optarg = NULL; /* clear any left over state from previous option */
if(spamc_optreset)
@@ -241,15 +241,16 @@
longopt = argv[spamc_optind++];
if(longopt[2] == ':')
return(longoptiserr(argc, argv, spamc_optind, OPTERRCOLON));
+ longoptlen = strlen(longopt) - 2;
if((bp = strchr(longopt, '='))) {
opt = strdup(bp+1);
- longopt[(strlen(longopt)-strlen(bp))] = '\0';
+ longoptlen -= strlen(bp);
}

for(i=1; ; i++) {
if((longopts[i].name == NULL) || (longopts[i].name == 0))
return(longoptiserr(argc, argv, spamc_optind-1, OPTERRNF));
- if((strcmp(longopt+2, longopts[i].name)) == 0) {
+ if((memcmp(longopt+2, longopts[i].name, longoptlen)) == 0) {
*longindex = i;
if(longopts[i].has_arg == required_argument) {
if(((spamc_optind >= argc) || (!argv[spamc_optind]) || (argv[spamc_optind][0] == '-')) &&