X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;f=cgisimple.c;h=9504ef9e7cba8c2bb875b283d2c0c8d769586d8a;hb=cf70a45c4266c4a246c556bafa3fe7cdd46f6ef9;hp=46bb33ec5ee5e9d9f97435ccaaa4ec8eff2fcf40;hpb=8272dae9df69d3062c5af5ab825124aadb05825c;p=privoxy.git diff --git a/cgisimple.c b/cgisimple.c index 46bb33ec..9504ef9e 100644 --- a/cgisimple.c +++ b/cgisimple.c @@ -1,4 +1,4 @@ -const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.40 2006/09/09 13:05:33 fabiankeil Exp $"; +const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.45 2006/12/28 18:16:41 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/cgisimple.c,v $ @@ -9,7 +9,7 @@ const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.40 2006/09/09 13:05:33 fabian * Functions declared include: * * - * Copyright : Written by and Copyright (C) 2001 the SourceForge + * Copyright : Written by and Copyright (C) 2001-2006 the SourceForge * Privoxy team. http://www.privoxy.org/ * * Based on the Internet Junkbuster originally written @@ -36,6 +36,36 @@ const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.40 2006/09/09 13:05:33 fabian * * Revisions : * $Log: cgisimple.c,v $ + * Revision 1.45 2006/12/28 18:16:41 fabiankeil + * Fixed gcc43 compiler warnings, zero out cgi_send_user_manual's + * body memory before using it, replaced sprintf calls with snprintf. + * + * Revision 1.44 2006/12/22 14:19:27 fabiankeil + * Removed checks whether or not AF_FILES have + * data structures associated with them in cgi_show_status. + * It doesn't matter as we're only interested in the file names. + * + * For the action files the checks were always true, + * but they prevented empty filter files from being + * listed. Fixes parts of BR 1619208. + * + * Revision 1.43 2006/12/17 17:57:56 fabiankeil + * - Added FEATURE_GRACEFUL_TERMINATION to the + * "conditional #defines" section + * - Escaped ampersands in generated HTML. + * - Renamed re-filter-filename to re-filter-filenames + * + * Revision 1.42 2006/11/21 15:43:12 fabiankeil + * Add special treatment for WIN32 to make sure + * cgi_send_user_manual opens the files in binary mode. + * Fixes BR 1600411 and unbreaks image delivery. + * + * Remove outdated comment. + * + * Revision 1.41 2006/10/09 19:18:28 roro + * Redirect http://p.p/user-manual (without trailing slash) to + * http://p.p/user-manual/ (with trailing slash), otherwise links will be broken. + * * Revision 1.40 2006/09/09 13:05:33 fabiankeil * Modified cgi_send_user_manual to serve binary * content without destroying it first. Should also be @@ -736,7 +766,15 @@ jb_err cgi_send_user_manual(struct client_state *csp, } /* Open user-manual file */ +#ifdef WIN32 + /* + * XXX: Do we support other operating systems that + * require special treatment to fopen in binary mode? + */ + if (NULL == (fp = fopen(full_path, "rb"))) +#else if (NULL == (fp = fopen(full_path, "r"))) +#endif /* def WIN32 */ { log_error(LOG_LEVEL_ERROR, "Cannot open user-manual file %s: %E", full_path); err = cgi_error_no_template(csp, rsp, full_path); @@ -746,7 +784,7 @@ jb_err cgi_send_user_manual(struct client_state *csp, /* Get file length */ fseek(fp, 0, SEEK_END); - length = ftell(fp); + length = (size_t)ftell(fp); fseek(fp, 0, SEEK_SET); /* Allocate memory and load the file directly into the body */ @@ -757,19 +795,19 @@ jb_err cgi_send_user_manual(struct client_state *csp, free(full_path); return JB_ERR_MEMORY; } + memset(rsp->body, '\0', length+1); if (!fread(rsp->body, length, 1, fp)) { /* - * Why should this happen? If it does, we just log - * it and serve what we got, most likely padded with garbage. + * This happens if we didn't fopen in binary mode. + * If it does, we just log it and serve what we got. */ log_error(LOG_LEVEL_ERROR, "Couldn't completely read user-manual file %s.", full_path); } fclose(fp); free(full_path); - /* Privoxy only gets it right for non-binary content. */ - rsp->content_length = (int)length; + rsp->content_length = length; /* Guess correct Content-Type based on the filename's ending */ if (filename) @@ -844,7 +882,7 @@ jb_err cgi_show_version(struct client_state *csp, * * Function : cgi_show_status * - * Description : CGI function that returns a a web page describing the + * Description : CGI function that returns a web page describing the * current status of Privoxy. * * Parameters : @@ -881,8 +919,6 @@ jb_err cgi_show_status(struct client_state *csp, int local_urls_read; int local_urls_rejected; #endif /* ndef FEATURE_STATISTICS */ - struct file_list * fl; - struct url_actions * b; jb_err err = JB_ERR_OK; struct map *exports; @@ -1003,13 +1039,13 @@ jb_err cgi_show_status(struct client_state *csp, perc_rej = (float)local_urls_rejected * 100.0F / (float)local_urls_read; - sprintf(buf, "%d", local_urls_read); + snprintf(buf, sizeof(buf), "%d", local_urls_read); if (!err) err = map(exports, "requests-received", 1, buf, 1); - sprintf(buf, "%d", local_urls_rejected); + snprintf(buf, sizeof(buf), "%d", local_urls_rejected); if (!err) err = map(exports, "requests-blocked", 1, buf, 1); - sprintf(buf, "%6.2f", perc_rej); + snprintf(buf, sizeof(buf), "%6.2f", perc_rej); if (!err) err = map(exports, "percent-blocked", 1, buf, 1); } @@ -1026,11 +1062,11 @@ jb_err cgi_show_status(struct client_state *csp, s = strdup(""); for (i = 0; i < MAX_AF_FILES; i++) { - if (((fl = csp->actions_list[i]) != NULL) && ((b = fl->f) != NULL)) + if (csp->actions_list[i] != NULL) { if (!err) err = string_append(&s, "