Update 'Signals' section, the only explicitly handled signals are SIGINT, SIGTERM...
[privoxy.git] / parsers.c
index 2e2d64f..b401542 100644 (file)
--- a/parsers.c
+++ b/parsers.c
@@ -1,4 +1,4 @@
-const char parsers_rcs[] = "$Id: parsers.c,v 1.239 2011/12/31 14:49:07 fabiankeil Exp $";
+const char parsers_rcs[] = "$Id: parsers.c,v 1.242 2012/03/04 11:51:25 fabiankeil Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/parsers.c,v $
@@ -92,19 +92,6 @@ const char parsers_rcs[] = "$Id: parsers.c,v 1.239 2011/12/31 14:49:07 fabiankei
 
 const char parsers_h_rcs[] = PARSERS_H_VERSION;
 
-/* Fix a problem with Solaris.  There should be no effect on other
- * platforms.
- * Solaris's isspace() is a macro which uses its 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".
- *
- * Why did they write a character function that can't take a simple
- * "char" argument?  Doh!
- */
-#define ijb_isupper(__X) isupper((int)(unsigned char)(__X))
-#define ijb_tolower(__X) tolower((int)(unsigned char)(__X))
-
 static char *get_header_line(struct iob *iob);
 static jb_err scan_headers(struct client_state *csp);
 static jb_err header_tagger(struct client_state *csp, char *header);
@@ -783,11 +770,11 @@ static void normalize_lws(char *header)
 
    while (*p != '\0')
    {
-      if (ijb_isspace(*p) && ijb_isspace(*(p+1)))
+      if (privoxy_isspace(*p) && privoxy_isspace(*(p+1)))
       {
          char *q = p+1;
 
-         while (ijb_isspace(*q))
+         while (privoxy_isspace(*q))
          {
             q++;
          }
@@ -820,7 +807,7 @@ static void normalize_lws(char *header)
    }
 
    p = strchr(header, ':');
-   if ((p != NULL) && (p != header) && ijb_isspace(*(p-1)))
+   if ((p != NULL) && (p != header) && privoxy_isspace(*(p-1)))
    {
       /*
        * There's still space before the colon.
@@ -995,7 +982,7 @@ char *get_header_value(const struct list *header_list, const char *header_name)
              * Found: return pointer to start of value
              */
             ret = cur_entry->str + length;
-            while (*ret && ijb_isspace(*ret)) ret++;
+            while (*ret && privoxy_isspace(*ret)) ret++;
             return ret;
          }
       }
@@ -1557,8 +1544,7 @@ static jb_err filter_header(struct client_state *csp, char **header)
  *                to remove the header.  This function frees the
  *                original string if necessary.
  *
- * Returns     :  JB_ERR_OK on success, or
- *                JB_ERR_MEMORY on out-of-memory error.
+ * Returns     :  JB_ERR_OK on success.
  *
  *********************************************************************/
 static jb_err server_connection(struct client_state *csp, char **header)
@@ -1585,11 +1571,7 @@ static jb_err server_connection(struct client_state *csp, char **header)
       {
          char *old_header = *header;
 
-         *header = strdup("Connection: close");
-         if (header == NULL)
-         {
-            return JB_ERR_MEMORY;
-         }
+         *header = strdup_or_die("Connection: close");
          log_error(LOG_LEVEL_HEADER, "Replaced: \'%s\' with \'%s\'", old_header, *header);
          freez(old_header);
       }
@@ -1819,8 +1801,7 @@ static jb_err client_save_content_length(struct client_state *csp, char **header
  *                to remove the header.  This function frees the
  *                original string if necessary.
  *
- * Returns     :  JB_ERR_OK on success, or
- *                JB_ERR_MEMORY on out-of-memory error.
+ * Returns     :  JB_ERR_OK on success.
  *
  *********************************************************************/
 static jb_err client_connection(struct client_state *csp, char **header)
@@ -1847,11 +1828,7 @@ static jb_err client_connection(struct client_state *csp, char **header)
           {
              char *old_header = *header;
 
-             *header = strdup("Connection: keep-alive");
-             if (header == NULL)
-             {
-                return JB_ERR_MEMORY;
-             }
+             *header = strdup_or_die("Connection: keep-alive");
              log_error(LOG_LEVEL_HEADER,
                 "Replaced: \'%s\' with \'%s\'", old_header, *header);
              freez(old_header);
@@ -1879,11 +1856,7 @@ static jb_err client_connection(struct client_state *csp, char **header)
    {
       char *old_header = *header;
 
-      *header = strdup(connection_close);
-      if (header == NULL)
-      {
-         return JB_ERR_MEMORY;
-      }
+      *header = strdup_or_die(connection_close);
       log_error(LOG_LEVEL_HEADER,
          "Replaced: \'%s\' with \'%s\'", old_header, *header);
       freez(old_header);
@@ -2037,7 +2010,7 @@ static jb_err server_content_type(struct client_state *csp, char **header)
       if ((csp->content_type & CT_TEXT) || (csp->action->flags & ACTION_FORCE_TEXT_MODE))
       {
          freez(*header);
-         *header = strdup("Content-Type: ");
+         *header = strdup_or_die("Content-Type: ");
          string_append(header, csp->action->string[ACTION_STRING_CONTENT_TYPE]);
 
          if (header == NULL)
@@ -3141,16 +3114,9 @@ static jb_err client_host(struct client_state *csp, char **header)
        *csp->http->hostport == ' ' || *csp->http->hostport == '\0')
    {
 
-      if (NULL == (p = strdup((*header)+6)))
-      {
-         return JB_ERR_MEMORY;
-      }
+      p = strdup_or_die((*header)+6);
       chomp(p);
-      if (NULL == (q = strdup(p)))
-      {
-         freez(p);
-         return JB_ERR_MEMORY;
-      }
+      q = strdup_or_die(p);
 
       freez(csp->http->hostport);
       csp->http->hostport = p;
@@ -3771,7 +3737,7 @@ static jb_err server_set_cookie(struct client_state *csp, char **header)
       cur_tag = *header + 11;
 
       /* skip whitespace between "Set-Cookie:" and value */
-      while (*cur_tag && ijb_isspace(*cur_tag))
+      while (*cur_tag && privoxy_isspace(*cur_tag))
       {
          cur_tag++;
       }
@@ -3787,7 +3753,7 @@ static jb_err server_set_cookie(struct client_state *csp, char **header)
             next_tag++;
 
             /* skip whitespace ";" and start of tag */
-            while (*next_tag && ijb_isspace(*next_tag))
+            while (*next_tag && privoxy_isspace(*next_tag))
             {
                next_tag++;
             }
@@ -4033,7 +3999,7 @@ static jb_err parse_header_time(const char *header_time, time_t *result)
  *                the "Host:" header)
  *          2  :  http = storage for the result (host, port and hostport).
  *
- * Returns     :  JB_ERR_MEMORY in case of memory problems,
+ * Returns     :  JB_ERR_MEMORY (or terminates) in case of memory problems,
  *                JB_ERR_PARSE if the host header couldn't be found,
  *                JB_ERR_OK otherwise.
  *
@@ -4052,19 +4018,9 @@ jb_err get_destination_from_headers(const struct list *headers, struct http_requ
       return JB_ERR_PARSE;
    }
 
-   p = strdup(host);
-   if (NULL == p)
-   {
-      log_error(LOG_LEVEL_ERROR, "Out of memory while parsing \"Host:\" header");
-      return JB_ERR_MEMORY;
-   }
+   p = strdup_or_die(host);
    chomp(p);
-   if (NULL == (q = strdup(p)))
-   {
-      freez(p);
-      log_error(LOG_LEVEL_ERROR, "Out of memory while parsing \"Host:\" header");
-      return JB_ERR_MEMORY;
-   }
+   q = strdup_or_die(p);
 
    freez(http->hostport);
    http->hostport = p;
@@ -4196,16 +4152,10 @@ static jb_err create_fake_referrer(char **header, const char *fake_referrer)
 static jb_err handle_conditional_hide_referrer_parameter(char **header,
    const char *host, const int parameter_conditional_block)
 {
-   char *referer = strdup(*header);
+   char *referer = strdup_or_die(*header);
    const size_t hostlength = strlen(host);
    const char *referer_url = NULL;
 
-   if (NULL == referer)
-   {
-      freez(*header);
-      return JB_ERR_MEMORY;
-   }
-
    /* referer begins with 'Referer: http[s]://' */
    if ((hostlength+17) < strlen(referer))
    {