You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by si...@apache.org on 2007/01/02 01:16:58 UTC

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] == '-')) &&