X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=loaders.c;h=c62a399841fb8d75696e8198b0d0bc0e0fe05ec4;hp=d196f64578faed23143e14ce94d192a1d78494d5;hb=fdd604f3e302996f8d647720eef9f45d9070340e;hpb=4fe40027ab84df2690aaa393494e6fd1279f0b2f diff --git a/loaders.c b/loaders.c index d196f645..c62a3998 100644 --- a/loaders.c +++ b/loaders.c @@ -1,4 +1,4 @@ -const char loaders_rcs[] = "$Id: loaders.c,v 1.76 2010/07/21 14:35:09 fabiankeil Exp $"; +const char loaders_rcs[] = "$Id: loaders.c,v 1.81 2011/03/03 14:38:36 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/loaders.c,v $ @@ -359,7 +359,7 @@ jb_err simple_read_line(FILE *fp, char **dest, int *newline) p = buf; /* - * Character codes. If you have a wierd compiler and the following are + * Character codes. If you have a weird compiler and the following are * incorrect, you also need to fix NEWLINE() in loaders.h */ #define CHAR_CR '\r' /* ASCII 13 */ @@ -737,41 +737,27 @@ jb_err edit_read_line(FILE *fp, * and respects escaping of newline and comment char. * * Parameters : - * 1 : buf = Buffer to use. - * 2 : buflen = Size of buffer in bytes. - * 3 : fp = File to read from - * 4 : linenum = linenumber in file + * 1 : fp = File to read from + * 2 : linenum = linenumber in file + * 3 : buf = Pointer to a pointer to set to the data buffer. * * Returns : NULL on EOF or error * Otherwise, returns buf. * *********************************************************************/ -char *read_config_line(char *buf, size_t buflen, FILE *fp, unsigned long *linenum) +char *read_config_line(FILE *fp, unsigned long *linenum, char **buf) { jb_err err; - char *buf2 = NULL; - err = edit_read_line(fp, NULL, NULL, &buf2, NULL, linenum); + err = edit_read_line(fp, NULL, NULL, buf, NULL, linenum); if (err) { if (err == JB_ERR_MEMORY) { log_error(LOG_LEVEL_FATAL, "Out of memory loading a config file"); } - return NULL; - } - else - { - assert(buf2); - if (strlen(buf2) + 1U > buflen) - { - log_error(LOG_LEVEL_FATAL, - "Max line limit reached. Linenumber: %u. Lenght: %u. Max lenght: %u.", - *linenum, strlen(buf2), buflen-1); - } - strlcpy(buf, buf2, buflen); - free(buf2); - return buf; + *buf = NULL; } + return *buf; } @@ -849,7 +835,7 @@ int load_trustfile(struct client_state *csp) struct block_spec *b, *bl; struct url_spec **tl; - char buf[BUFFER_SIZE], *p, *q; + char *buf = NULL; int reject, trusted; struct file_list *fs; unsigned long linenum = 0; @@ -858,10 +844,7 @@ int load_trustfile(struct client_state *csp) if (!check_file_changed(current_trustfile, csp->config->trustfile, &fs)) { /* No need to load */ - if (csp) - { - csp->tlist = current_trustfile; - } + csp->tlist = current_trustfile; return(0); } if (!fs) @@ -883,7 +866,7 @@ int load_trustfile(struct client_state *csp) tl = csp->config->trust_list; - while (read_config_line(buf, sizeof(buf), fp, &linenum) != NULL) + while (read_config_line(fp, &linenum, &buf) != NULL) { trusted = 0; reject = 1; @@ -896,6 +879,9 @@ int load_trustfile(struct client_state *csp) if (*buf == '~') { + char *p; + char *q; + reject = 0; p = buf; q = p+1; @@ -908,6 +894,7 @@ int load_trustfile(struct client_state *csp) /* skip blank lines */ if (*buf == '\0') { + freez(buf); continue; } @@ -941,6 +928,7 @@ int load_trustfile(struct client_state *csp) *tl++ = b->url; } } + freez(buf); } if(trusted_referrers >= MAX_TRUSTED_REFERRERS) @@ -972,12 +960,12 @@ int load_trustfile(struct client_state *csp) { csp->tlist = fs; } - return(0); load_trustfile_error: log_error(LOG_LEVEL_FATAL, "can't load trustfile '%s': %E", - csp->config->trustfile); + csp->config->trustfile); + freez(buf); return(-1); } @@ -1134,7 +1122,7 @@ int load_one_re_filterfile(struct client_state *csp, int fileid) struct re_filterfile_spec *new_bl, *bl = NULL; struct file_list *fs; - char buf[BUFFER_SIZE]; + char *buf = NULL; int error; unsigned long linenum = 0; pcrs_job *dummy, *lastjob = NULL; @@ -1168,7 +1156,7 @@ int load_one_re_filterfile(struct client_state *csp, int fileid) /* * Read line by line */ - while (read_config_line(buf, sizeof(buf), fp, &linenum) != NULL) + while (read_config_line(fp, &linenum, &buf) != NULL) { int new_filter = NO_NEW_FILTER; @@ -1252,6 +1240,7 @@ int load_one_re_filterfile(struct client_state *csp, int fileid) log_error(LOG_LEVEL_RE_FILTER, "Reading in filter \"%s\" (\"%s\")", bl->name, bl->description); + freez(buf); continue; } @@ -1283,6 +1272,7 @@ int load_one_re_filterfile(struct client_state *csp, int fileid) bl->dynamic = 1; log_error(LOG_LEVEL_RE_FILTER, "Adding dynamic re_filter job \'%s\' to filter %s succeeded.", buf, bl->name); + freez(buf); continue; } else if (bl->dynamic) @@ -1294,6 +1284,7 @@ int load_one_re_filterfile(struct client_state *csp, int fileid) */ log_error(LOG_LEVEL_RE_FILTER, "Adding static re_filter job \'%s\' to dynamic filter %s succeeded.", buf, bl->name); + freez(buf); continue; } @@ -1301,6 +1292,7 @@ int load_one_re_filterfile(struct client_state *csp, int fileid) { log_error(LOG_LEVEL_ERROR, "Adding re_filter job \'%s\' to filter %s failed with error %d.", buf, bl->name, error); + freez(buf); continue; } else @@ -1322,6 +1314,7 @@ int load_one_re_filterfile(struct client_state *csp, int fileid) log_error(LOG_LEVEL_ERROR, "Ignoring job %s outside filter block in %s, line %d", buf, csp->config->re_filterfile[fileid], linenum); } + freez(buf); } fclose(fp); @@ -1475,7 +1468,8 @@ int any_loaded_file_changed(const struct file_list *files_to_check) { if (file_has_been_modified(file_to_check->filename, file_to_check->lastmodified)) { - log_error(LOG_LEVEL_INFO, "%s has been changed", file_to_check->filename); + log_error(LOG_LEVEL_INFO, + "File modification detected: %s", file_to_check->filename); return TRUE; } file_to_check = file_to_check->next;