You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by km...@apache.org on 2017/12/28 23:14:24 UTC

svn commit: r1819449 - /spamassassin/branches/3.4/spamc/getopt.c

Author: kmcgrail
Date: Thu Dec 28 23:14:24 2017
New Revision: 1819449

URL: http://svn.apache.org/viewvc?rev=1819449&view=rev
Log:
bug 7524 logic patch for getoptlong issues in spamc

Modified:
    spamassassin/branches/3.4/spamc/getopt.c

Modified: spamassassin/branches/3.4/spamc/getopt.c
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.4/spamc/getopt.c?rev=1819449&r1=1819448&r2=1819449&view=diff
==============================================================================
--- spamassassin/branches/3.4/spamc/getopt.c (original)
+++ spamassassin/branches/3.4/spamc/getopt.c Thu Dec 28 23:14:24 2017
@@ -244,20 +244,26 @@ spamc_getopt_long(int argc, char * const
       longoptlen = strlen(longopt) - 2;
       if((bp = strchr(longopt, '='))) {
          opt = strdup(bp+1);
+         if (opt == NULL) {
+            err(1, NULL);
+         }  
          longoptlen -= strlen(bp);
       }
 
       for(i=0; ; i++) {
 	 /* changed to longopts[i].name[0] == 0 - bug 7148 */
-         if((longopts[i].name == NULL) || (longopts[i].name[0] == 0))
-            /* free(opt); */ /* Reverting per bug 7524 */
+         if((longopts[i].name == NULL) || (longopts[i].name[0] == 0)) {
+            free(opt);
             return(longoptiserr(argc, argv, spamc_optind-1, OPTERRNF));
+         }
          if(((strncmp(longopt+2, longopts[i].name, longoptlen)) == 0) && (strlen(longopts[i].name) == longoptlen)) {
             *longindex = i;
             if(longopts[i].has_arg == required_argument) {
                if(((spamc_optind >= argc) || (!argv[spamc_optind]) || (argv[spamc_optind][0] == '-')) && 
-                   (opt == NULL))
+                   (opt == NULL)) {
+                  free(opt);
                   return(longoptiserr(argc, argv, spamc_optind-1, OPTERRARG));
+               }
                if(opt != NULL) {
                   spamc_optarg = opt;
                } else {
@@ -273,6 +279,7 @@ spamc_getopt_long(int argc, char * const
                   }
                }
             }
+            free(opt);
             if(longopts[i].flag == NULL) {
                return(longopts[i].val);
             } else {