In ssplit(), assert() that the last substring already is nul-terminated
[privoxy.git] / loadcfg.c
index 49cb2f5..6c329ec 100644 (file)
--- a/loadcfg.c
+++ b/loadcfg.c
@@ -1,4 +1,4 @@
-const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.121 2011/07/30 15:05:23 fabiankeil Exp $";
+const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.128 2012/05/24 14:58:16 fabiankeil Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/loadcfg.c,v $
@@ -72,6 +72,7 @@ const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.121 2011/07/30 15:05:23 fabiankei
 
 #endif
 
+#include "project.h"
 #include "loadcfg.h"
 #include "list.h"
 #include "jcc.h"
@@ -87,17 +88,6 @@ const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.121 2011/07/30 15:05:23 fabiankei
 
 const char loadcfg_h_rcs[] = LOADCFG_H_VERSION;
 
-/*
- * Fix a problem with Solaris.  There should be no effect on other
- * platforms.
- * Solaris's isspace() is a macro which uses it's argument directly
- * as an array index.  Therefore we need to make sure that high-bit
- * characters generate +ve values, and ideally we also want to make
- * the argument match the declared parameter type of "int".
- */
-#define ijb_isupper(__X) isupper((int)(unsigned char)(__X))
-#define ijb_tolower(__X) tolower((int)(unsigned char)(__X))
-
 #ifdef FEATURE_TOGGLE
 /* Privoxy is enabled by default. */
 int global_toggle_state = 1;
@@ -476,9 +466,9 @@ struct configuration_spec * load_config(void)
       /* Make sure the command field is lower case */
       for (p = cmd; *p; p++)
       {
-         if (ijb_isupper(*p))
+         if (privoxy_isupper(*p))
          {
-            *p = (char)ijb_tolower(*p);
+            *p = (char)privoxy_tolower(*p);
          }
       }
 
@@ -554,7 +544,7 @@ struct configuration_spec * load_config(void)
  * *************************************************************************/
          case hash_confdir :
             freez(config->confdir);
-            config->confdir = make_path( NULL, arg);
+            config->confdir = make_path(NULL, arg);
             break;
 
 /* *************************************************************************
@@ -615,7 +605,7 @@ struct configuration_spec * load_config(void)
             if (*arg != '\0')
             {
                int timeout = atoi(arg);
-               if (0 < timeout)
+               if (0 <= timeout)
                {
                   config->default_server_timeout = (unsigned int)timeout;
                }
@@ -634,7 +624,7 @@ struct configuration_spec * load_config(void)
 #ifdef FEATURE_ACL
          case hash_deny_access:
             strlcpy(tmp, arg, sizeof(tmp));
-            vec_count = ssplit(tmp, " \t", vec, SZ(vec), 1, 1);
+            vec_count = ssplit(tmp, " \t", vec, SZ(vec));
 
             if ((vec_count != 1) && (vec_count != 2))
             {
@@ -819,7 +809,7 @@ struct configuration_spec * load_config(void)
  * *************************************************************************/
          case hash_forward:
             strlcpy(tmp, arg, sizeof(tmp));
-            vec_count = ssplit(tmp, " \t", vec, SZ(vec), 1, 1);
+            vec_count = ssplit(tmp, " \t", vec, SZ(vec));
 
             if (vec_count != 2)
             {
@@ -874,7 +864,7 @@ struct configuration_spec * load_config(void)
  * *************************************************************************/
          case hash_forward_socks4:
             strlcpy(tmp, arg, sizeof(tmp));
-            vec_count = ssplit(tmp, " \t", vec, SZ(vec), 1, 1);
+            vec_count = ssplit(tmp, " \t", vec, SZ(vec));
 
             if (vec_count != 3)
             {
@@ -941,7 +931,7 @@ struct configuration_spec * load_config(void)
          case hash_forward_socks4a:
          case hash_forward_socks5:
             strlcpy(tmp, arg, sizeof(tmp));
-            vec_count = ssplit(tmp, " \t", vec, SZ(vec), 1, 1);
+            vec_count = ssplit(tmp, " \t", vec, SZ(vec));
 
             if (vec_count != 3)
             {
@@ -1131,7 +1121,7 @@ struct configuration_spec * load_config(void)
 #ifdef FEATURE_ACL
          case hash_permit_access:
             strlcpy(tmp, arg, sizeof(tmp));
-            vec_count = ssplit(tmp, " \t", vec, SZ(vec), 1, 1);
+            vec_count = ssplit(tmp, " \t", vec, SZ(vec));
 
             if ((vec_count != 1) && (vec_count != 2))
             {
@@ -1230,7 +1220,7 @@ struct configuration_spec * load_config(void)
             if (*arg != '\0')
             {
                int socket_timeout = atoi(arg);
-               if (0 < socket_timeout)
+               if (0 <= socket_timeout)
                {
                   config->socket_timeout = socket_timeout;
                }
@@ -1447,19 +1437,20 @@ struct configuration_spec * load_config(void)
              * error.  To change back to an error, just change log level
              * to LOG_LEVEL_FATAL.
              */
-            log_error(LOG_LEVEL_ERROR, "Ignoring unrecognized directive '%s' (%luul) in line %lu "
-                  "in configuration file (%s).",  buf, directive_hash, linenum, configfile);
+            log_error(LOG_LEVEL_ERROR, "Ignoring unrecognized directive "
+               "'%s' (%uU) in line %lu in configuration file (%s).",
+               buf, directive_hash, linenum, configfile);
             string_append(&config->proxy_args,
                " <strong class='warning'>Warning: Ignoring unrecognized directive:</strong>");
             break;
 
 /* *************************************************************************/
-      } /* end switch( hash_string(cmd) ) */
+      } /* end switch(hash_string(cmd)) */
 
       /* Save the argument for the show-status page. */
       savearg(cmd, arg, config);
       freez(buf);
-   } /* end while ( read_config_line(...) ) */
+   } /* end while (read_config_line(...)) */
 
    fclose(configfp);
 
@@ -1542,9 +1533,9 @@ struct configuration_spec * load_config(void)
    }
 #endif /* def FEATURE_TRUST */
 
-   if ( NULL == config->haddr[0] )
+   if (NULL == config->haddr[0])
    {
-      config->haddr[0] = strdup( HADDR_DEFAULT );
+      config->haddr[0] = strdup(HADDR_DEFAULT);
       if (NULL == config->haddr[0])
       {
          log_error(LOG_LEVEL_FATAL, "Out of memory while copying default listening address");
@@ -1718,7 +1709,7 @@ static void savearg(char *command, char *argument, struct configuration_spec * c
       return;
    }
 
-   if ( (NULL != argument) && ('\0' != *argument) )
+   if ((NULL != argument) && ('\0' != *argument))
    {
       s = html_encode(argument);
       if (NULL == s)