Update this section, which has been ignored.
[privoxy.git] / jcc.c
diff --git a/jcc.c b/jcc.c
index 30e146b..be8bd07 100644 (file)
--- a/jcc.c
+++ b/jcc.c
@@ -1,4 +1,4 @@
-const char jcc_rcs[] = "$Id: jcc.c,v 1.155 2007/10/23 20:12:45 fabiankeil Exp $";
+const char jcc_rcs[] = "$Id: jcc.c,v 1.161 2007/12/04 19:44:22 fabiankeil Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/jcc.c,v $
@@ -33,6 +33,28 @@ const char jcc_rcs[] = "$Id: jcc.c,v 1.155 2007/10/23 20:12:45 fabiankeil Exp $"
  *
  * Revisions   :
  *    $Log: jcc.c,v $
+ *    Revision 1.161  2007/12/04 19:44:22  fabiankeil
+ *    Unbreak trustfile which previously didn't work without
+ *    FEATURE_TOGGLE. Fixes BR#1843585, reported by Lee.
+ *
+ *    Revision 1.160  2007/11/29 18:00:29  fabiankeil
+ *    Plug memory leak. Spotted by Valgrind, triggered by
+ *    Privoxy-Regression-Test feeding proxyfuzz.py.
+ *
+ *    Revision 1.159  2007/11/24 14:34:09  fabiankeil
+ *    In the HTTP snipplets, refer to the client as client.
+ *
+ *    Revision 1.158  2007/11/11 16:44:17  fabiankeil
+ *    Emit a log message when activating the MS IIS5 hack.
+ *
+ *    Revision 1.157  2007/11/03 17:34:49  fabiankeil
+ *    Log the "weak randomization factor" warning only
+ *    once for mingw32 and provide some more details.
+ *
+ *    Revision 1.156  2007/11/01 18:20:58  fabiankeil
+ *    Initialize log module after initializing mutexes, future
+ *    deadlocks in that code should now work cross-platform.
+ *
  *    Revision 1.155  2007/10/23 20:12:45  fabiankeil
  *    Fix first CSUCCEED line to end in \r\n as required by RFC1945.
  *    Reported by Bert van Leeuwen in BR#1818808.
@@ -1090,11 +1112,11 @@ static const char CSUCCEED[] =
    "Proxy-Agent: Privoxy/" VERSION "\r\n\r\n";
 
 static const char CHEADER[] =
-   "HTTP/1.0 400 Invalid header received from browser\r\n"
+   "HTTP/1.0 400 Invalid header received from client\r\n"
    "Proxy-Agent: Privoxy " VERSION "\r\n"
    "Content-Type: text/plain\r\n"
    "Connection: close\r\n\r\n"
-   "Invalid header received from browser.\r\n";
+   "Invalid header received from client.\r\n";
 
 static const char CFORBIDDEN[] =
    "HTTP/1.0 403 Connection not allowable\r\n"
@@ -1103,20 +1125,20 @@ static const char CFORBIDDEN[] =
    "Connection: close\r\n\r\n";
 
 static const char FTP_RESPONSE[] =
-   "HTTP/1.0 400 Invalid request received from browser\r\n"
+   "HTTP/1.0 400 Invalid request received from client\r\n"
    "Content-Type: text/plain\r\n"
    "Connection: close\r\n\r\n"
    "Invalid request. Privoxy doesn't support FTP.\r\n";
 
 static const char GOPHER_RESPONSE[] =
-   "HTTP/1.0 400 Invalid request received from browser\r\n"
+   "HTTP/1.0 400 Invalid request received from client\r\n"
    "Content-Type: text/plain\r\n"
    "Connection: close\r\n\r\n"
    "Invalid request. Privoxy doesn't support gopher.\r\n";
 
 /* XXX: should be a template */
 static const char MISSING_DESTINATION_RESPONSE[] =
-   "HTTP/1.0 400 Bad request received from browser\r\n"
+   "HTTP/1.0 400 Bad request received from client\r\n"
    "Proxy-Agent: Privoxy " VERSION "\r\n"
    "Content-Type: text/plain\r\n"
    "Connection: close\r\n\r\n"
@@ -1129,12 +1151,12 @@ static const char NO_SERVER_DATA_RESPONSE[] =
    "Content-Type: text/plain\r\n"
    "Connection: close\r\n\r\n"
    "Empty server or forwarder response.\r\n"
-   "The connection was closed without sending any data.\r\n";
+   "The connection has been closed but Privoxy didn't receive any data.\r\n";
 
 #if 0
 /* XXX: should be a template */
 static const char NULL_BYTE_RESPONSE[] =
-   "HTTP/1.0 400 Bad request received from browser\r\n"
+   "HTTP/1.0 400 Bad request received from client\r\n"
    "Proxy-Agent: Privoxy " VERSION "\r\n"
    "Content-Type: text/plain\r\n"
    "Connection: close\r\n\r\n"
@@ -2000,6 +2022,7 @@ static void chat(struct client_state *csp)
          if (len <= 0)
          {
             log_error(LOG_LEVEL_ERROR, "read from client failed: %E");
+            destroy_list(headers);
             return;
          }
          
@@ -2009,6 +2032,7 @@ static void chat(struct client_state *csp)
           */
          if (add_to_iob(csp, buf, len))
          {
+            destroy_list(headers);
             return;
          }
          continue;
@@ -2038,7 +2062,7 @@ static void chat(struct client_state *csp)
           * An error response has already been send
           * and we're done here.
           */
-          return;
+         return;
       }
    }
 
@@ -2513,6 +2537,9 @@ static void chat(struct client_state *csp)
              * This is NOT the body, so
              * Let's pretend the server just sent us a blank line.
              */
+            log_error(LOG_LEVEL_INFO,
+               "Malformerd HTTP headers detected and MS IIS5 hack enabled. "
+               "Expect an invalid response or even no response at all.");
             snprintf(buf, sizeof(buf), "\r\n");
             len = (int)strlen(buf);
 
@@ -3103,6 +3130,7 @@ int main(int argc, const char *argv[])
    files->next = NULL;
    clients->next = NULL;
 
+   /* XXX: factor out initialising after the next stable release. */
 #ifdef AMIGA
    InitAmiga();
 #elif defined(_WIN32)
@@ -3118,6 +3146,15 @@ int main(int argc, const char *argv[])
    random_seed = (unsigned int)time(NULL);
 #ifdef HAVE_RANDOM
    srandom(random_seed);
+#elif defined (_WIN32)
+   /*
+    * See pick_from_range() in miscutil.c for details.
+    */
+   log_error(LOG_LEVEL_INFO,
+      "No thread-safe PRNG implemented for your platform. "
+      "Using weak \'randomization\' factor which will "
+      "limit the already questionable usefulness of "
+      "header-time-randomizing actions (disabled by default).");
 #else
    srand(random_seed);
 #endif /* ifdef HAVE_RANDOM */
@@ -3541,10 +3578,10 @@ static void listen_loop(void)
 
 #ifdef FEATURE_TOGGLE
       if (global_toggle_state)
+#endif /* def FEATURE_TOGGLE */
       {
          csp->flags |= CSP_FLAG_TOGGLED_ON;
       }
-#endif /* def FEATURE_TOGGLE */
 
       if (run_loader(csp))
       {