X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=cgiedit.c;h=e824129516aceabf258b967fb39f68658783d609;hp=49d9ee062571f0b8a9b5527d0f073c41559862fc;hb=cb87840abe87c389497380128af6bf143dcbe330;hpb=e72b401da5537a14b29e945944926373cb251825 diff --git a/cgiedit.c b/cgiedit.c index 49d9ee06..e8241295 100644 --- a/cgiedit.c +++ b/cgiedit.c @@ -1,12 +1,10 @@ -const char cgiedit_rcs[] = "$Id: cgiedit.c,v 1.65 2009/03/08 14:19:22 fabiankeil Exp $"; +const char cgiedit_rcs[] = "$Id: cgiedit.c,v 1.75 2012/03/09 17:55:49 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/cgiedit.c,v $ * * Purpose : CGI-based actionsfile editor. * - * Functions declared include: cgi_edit_* - * * NOTE: The CGIs in this file use parameter names * such as "f" and "s" which are really *BAD* choices. * However, I'm trying to save bytes in the @@ -85,10 +83,10 @@ struct file_line { /** Next entry in the linked list */ struct file_line * next; - + /** The raw data, to write out if this line is unmodified. */ char * raw; - + /** Comments and/or whitespace to put before this line if it's modified and then written out. */ char * prefix; @@ -97,7 +95,7 @@ struct file_line are performed on the data read from file before it's stored here, so it will be a single line of data. */ char * unprocessed; - + /** The type of data on this line. One of the FILE_LINE_xxx constants. */ int type; @@ -321,15 +319,10 @@ static jb_err actions_from_radio(const struct map * parameters, static jb_err map_copy_parameter_html(struct map *out, const struct map *in, const char *name); -#if 0 /* unused function */ -static jb_err map_copy_parameter_url(struct map *out, - const struct map *in, - const char *name); -#endif /* unused function */ - -static jb_err get_file_name_param(struct client_state *csp, - const struct map *parameters, - const char *param_name, + +static jb_err get_file_name_param(struct client_state *csp, + const struct map *parameters, + const char *param_name, const char **pfilename); /* Internal convenience functions */ @@ -433,56 +426,6 @@ static jb_err map_copy_parameter_html(struct map *out, } -#if 0 /* unused function */ -/********************************************************************* - * - * Function : map_copy_parameter_url - * - * Description : Copy a CGI parameter from one map to another, URL - * encoding it. - * - * Parameters : - * 1 : out = target map - * 2 : in = source map - * 3 : name = name of cgi parameter to copy - * - * Returns : JB_ERR_OK on success - * JB_ERR_MEMORY on out-of-memory - * JB_ERR_CGI_PARAMS if the parameter doesn't exist - * in the source map - * - *********************************************************************/ -static jb_err map_copy_parameter_url(struct map *out, - const struct map *in, - const char *name) -{ - const char * value; - jb_err err; - - assert(out); - assert(in); - assert(name); - - value = lookup(in, name); - err = map(out, name, 1, url_encode(value), 0); - - if (err) - { - /* Out of memory */ - return err; - } - else if (*value == '\0') - { - return JB_ERR_CGI_PARAMS; - } - else - { - return JB_ERR_OK; - } -} -#endif /* 0 - unused function */ - - /********************************************************************* * * Function : cgi_edit_actions_url_form @@ -707,7 +650,7 @@ jb_err cgi_edit_actions_remove_url_form(struct client_state *csp, if (cur_line->type == FILE_LINE_ACTION) { section_start_line_number = line_number; - } + } cur_line = cur_line->next; } @@ -822,12 +765,7 @@ jb_err edit_write_file(struct editable_file * file) /* Allocate new memory for string */ len = strlen(cur_line->unprocessed) + (size_t)numhash; - if (NULL == (str = malloc(len + 1))) - { - /* Uh oh, just trashed file! */ - fclose(fp); - return JB_ERR_MEMORY; - } + str = malloc_or_die(len + 1); /* Copy string but quote hashes */ src = cur_line->unprocessed; @@ -1035,7 +973,7 @@ static int match_actions_file_header_line(const char * line, const char * name) line += 2; /* Look for optional whitespace */ - while ( (*line == ' ') || (*line == '\t') ) + while ((*line == ' ') || (*line == '\t')) { line++; } @@ -1049,7 +987,7 @@ static int match_actions_file_header_line(const char * line, const char * name) line += len; /* Look for optional whitespace */ - while ( (*line == ' ') || (*line == '\t') ) + while ((*line == ' ') || (*line == '\t')) { line++; } @@ -1118,10 +1056,7 @@ static jb_err split_line_on_equals(const char * line, char ** pname, char ** pva } name_len = (size_t)(name_end - line) + 1; /* Length excluding \0 */ - if (NULL == (*pname = (char *) malloc(name_len + 1))) - { - return JB_ERR_MEMORY; - } + *pname = malloc_or_die(name_len + 1); strncpy(*pname, line, name_len); (*pname)[name_len] = '\0'; @@ -1191,16 +1126,16 @@ jb_err edit_parse_actions_file(struct editable_file * file) /* Skip leading blanks. Should only happen if file is * empty (which is valid, but pointless). */ - while ( (cur_line != NULL) - && (cur_line->unprocessed[0] == '\0') ) + while ((cur_line != NULL) + && (cur_line->unprocessed[0] == '\0')) { /* Blank line */ cur_line->type = FILE_LINE_BLANK; cur_line = cur_line->next; } - if ( (cur_line != NULL) - && (cur_line->unprocessed[0] != '{') ) + if ((cur_line != NULL) + && (cur_line->unprocessed[0] != '{')) { /* File doesn't start with a header */ file->parse_error = cur_line; @@ -1208,8 +1143,8 @@ jb_err edit_parse_actions_file(struct editable_file * file) return JB_ERR_PARSE; } - if ( (cur_line != NULL) && (0 == - match_actions_file_header_line(cur_line->unprocessed, "settings") ) ) + if ((cur_line != NULL) && (0 == + match_actions_file_header_line(cur_line->unprocessed, "settings"))) { cur_line->type = FILE_LINE_SETTINGS_HEADER; @@ -1243,8 +1178,8 @@ jb_err edit_parse_actions_file(struct editable_file * file) } } - if ( (cur_line != NULL) && (0 == - match_actions_file_header_line(cur_line->unprocessed, "description") ) ) + if ((cur_line != NULL) && (0 == + match_actions_file_header_line(cur_line->unprocessed, "description"))) { cur_line->type = FILE_LINE_DESCRIPTION_HEADER; @@ -1263,8 +1198,8 @@ jb_err edit_parse_actions_file(struct editable_file * file) } } - if ( (cur_line != NULL) && (0 == - match_actions_file_header_line(cur_line->unprocessed, "alias") ) ) + if ((cur_line != NULL) && (0 == + match_actions_file_header_line(cur_line->unprocessed, "alias"))) { cur_line->type = FILE_LINE_ALIAS_HEADER; @@ -1368,14 +1303,14 @@ jb_err edit_parse_actions_file(struct editable_file * file) return JB_ERR_PARSE; } - while ( (*text == ' ') || (*text == '\t') ) + while ((*text == ' ') || (*text == '\t')) { text++; len--; } - while ( (len > (size_t)0) - && ( (text[len - 1] == ' ') - || (text[len - 1] == '\t') ) ) + while ((len > (size_t)0) + && ((text[len - 1] == ' ') + || (text[len - 1] == '\t'))) { len--; } @@ -1383,12 +1318,7 @@ jb_err edit_parse_actions_file(struct editable_file * file) cur_line->type = FILE_LINE_ACTION; /* Remove {} and make copy */ - if (NULL == (value = (char *) malloc(len + 1))) - { - /* Out of memory */ - free_alias_list(alias_list); - return JB_ERR_MEMORY; - } + value = malloc_or_die(len + 1); strncpy(value, text, len); value[len] = '\0'; @@ -1483,7 +1413,7 @@ jb_err edit_read_file_lines(FILE *fp, struct file_line ** pfile, int *newline) if (rval) { /* Out of memory or empty file. */ - /* Note that empty file is not an error we propogate up */ + /* Note that empty file is not an error we propagate up */ free(cur_line); return ((rval == JB_ERR_FILE) ? JB_ERR_OK : rval); } @@ -1588,7 +1518,7 @@ jb_err edit_read_file(struct client_state *csp, * Probably an old-school URL like * http://config.privoxy.org/edit-actions-list?f=default */ - err = get_file_name_param(csp, parameters, "f", &filename); + get_file_name_param(csp, parameters, "f", &filename); } if (NULL == filename || stat(filename, statbuf) < 0) @@ -1734,7 +1664,7 @@ jb_err edit_read_actions_file(struct client_state *csp, { log_error(LOG_LEVEL_INFO, "Timestamp mismatch limit reached, turning CGI editor off. " - "Reload the configuration file to reenable it."); + "Reload the configuration file to re-enable it."); csp->config->feature_flags &= ~RUNTIME_FEATURE_CGI_EDIT_ACTIONS; } } @@ -1840,7 +1770,7 @@ static jb_err get_file_name_param(struct client_state *csp, && ((ch < 'a') || (ch > 'z')) && ((ch < '0') || (ch > '9')) && (ch != '-') - && (ch != '_') ) + && (ch != '_')) { /* Probable hack attempt. */ return JB_ERR_CGI_PARAMS; @@ -1849,11 +1779,7 @@ static jb_err get_file_name_param(struct client_state *csp, /* Append extension */ name_size = len + strlen(suffix) + 1; - name = malloc(name_size); - if (name == NULL) - { - return JB_ERR_MEMORY; - } + name = malloc_or_die(name_size); strlcpy(name, param, name_size); strlcat(name, suffix, name_size); @@ -2053,11 +1979,7 @@ static jb_err map_radio(struct map * exports, assert(optionname); assert(values); - buf = malloc(buf_size); - if (buf == NULL) - { - return JB_ERR_MEMORY; - } + buf = malloc_or_die(buf_size); strlcpy(buf, optionname, buf_size); @@ -2587,7 +2509,7 @@ jb_err cgi_edit_actions_list(struct client_state *csp, if (!err) err = map(section_exports, "actions", 1, actions_to_html(csp, cur_line->data.action), 0); - if ( (!err) + if ((!err) && (cur_line->next != NULL) && (cur_line->next->type == FILE_LINE_URL)) { @@ -2725,8 +2647,8 @@ jb_err cgi_edit_actions_list(struct client_state *csp, snprintf(buf, sizeof(buf), "%d", line_number); if (!err) err = map(section_exports, "s-next", 1, buf, 1); - if ( (cur_line != NULL) - && (cur_line->type == FILE_LINE_ACTION)) + if ((cur_line != NULL) + && (cur_line->type == FILE_LINE_ACTION)) { /* Not last section */ if (!err) err = map_block_keep(section_exports, "s-next-exists"); @@ -2873,7 +2795,7 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp, if (!err) err = actions_to_radio(exports, cur_line->data.action); /* - * XXX: Some browsers (at least IE6 and IE7) have an artifical URL + * XXX: Some browsers (at least IE6 and IE7) have an artificial URL * length limitation and ignore clicks on the Submit buttons if * the resulting GET URL would be longer than their limit. * @@ -2882,7 +2804,7 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp, * browsers (BR #1570678). * * The config option split-large-forms works around this browser - * bug (HTTP has no URL lenght limitation) by deviding the action + * bug (HTTP has no URL length limitation) by deviding the action * list form into multiple smaller ones. It means the URLs are shorter * and work in broken browsers as well, but the user can no longer change * all actions with one submit. @@ -2890,7 +2812,7 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp, * A better solution would be to switch to POST requests, * but this will do for now. */ - if(!err && (csp->config->feature_flags & RUNTIME_FEATURE_SPLIT_LARGE_FORMS)) + if (!err && (csp->config->feature_flags & RUNTIME_FEATURE_SPLIT_LARGE_FORMS)) { /* Generate multiple smaller form by killing the big one. */ err = map_block_killer(exports, "one-form-only"); @@ -3272,7 +3194,7 @@ jb_err cgi_edit_actions_submit(struct client_state *csp, } } - if(err) + if (err) { /* Out of memory */ edit_free_file(file); @@ -3297,13 +3219,7 @@ jb_err cgi_edit_actions_submit(struct client_state *csp, } newtext_size = len + 2; - if (NULL == (newtext = malloc(newtext_size))) - { - /* Out of memory */ - free(actiontext); - edit_free_file(file); - return JB_ERR_MEMORY; - } + newtext = malloc_or_die(newtext_size); strlcpy(newtext, actiontext, newtext_size); free(actiontext); newtext[0] = '{'; @@ -3415,13 +3331,13 @@ jb_err cgi_edit_actions_url(struct client_state *csp, if (cur_line->type == FILE_LINE_ACTION) { section_start_line_number = line_number; - } + } cur_line = cur_line->next; line_number++; } - if ( (cur_line == NULL) - || (cur_line->type != FILE_LINE_URL)) + if ((cur_line == NULL) + || (cur_line->type != FILE_LINE_URL)) { /* Invalid "patternid" parameter */ free(new_pattern); @@ -3532,8 +3448,8 @@ jb_err cgi_edit_actions_add_url(struct client_state *csp, line_number++; } - if ( (cur_line == NULL) - || (cur_line->type != FILE_LINE_ACTION)) + if ((cur_line == NULL) + || (cur_line->type != FILE_LINE_ACTION)) { /* Invalid "sectionid" parameter */ free(new_pattern); @@ -3762,16 +3678,16 @@ jb_err cgi_edit_actions_section_remove(struct client_state *csp, line_number++; } - if ( (cur_line == NULL) - || (cur_line->type != FILE_LINE_ACTION) ) + if ((cur_line == NULL) + || (cur_line->type != FILE_LINE_ACTION)) { /* Invalid "sectionid" parameter */ edit_free_file(file); return JB_ERR_CGI_PARAMS; } - if ( (cur_line->next != NULL) - && (cur_line->next->type == FILE_LINE_URL) ) + if ((cur_line->next != NULL) + && (cur_line->next->type == FILE_LINE_URL)) { /* Section not empty. */ edit_free_file(file); @@ -3885,8 +3801,8 @@ jb_err cgi_edit_actions_section_add(struct client_state *csp, /* There's something in the file, find the line before the first * action. */ - while ( (cur_line->next != NULL) - && (cur_line->next->type != FILE_LINE_ACTION) ) + while ((cur_line->next != NULL) + && (cur_line->next->type != FILE_LINE_ACTION)) { cur_line = cur_line->next; line_number++; @@ -3907,8 +3823,8 @@ jb_err cgi_edit_actions_section_add(struct client_state *csp, line_number++; } - if ( (cur_line == NULL) - || (cur_line->type != FILE_LINE_ACTION)) + if ((cur_line == NULL) + || (cur_line->type != FILE_LINE_ACTION)) { /* Invalid "sectionid" parameter */ edit_free_file(file); @@ -3916,8 +3832,8 @@ jb_err cgi_edit_actions_section_add(struct client_state *csp, } /* Skip through the section to find the last line in it. */ - while ( (cur_line->next != NULL) - && (cur_line->next->type != FILE_LINE_ACTION) ) + while ((cur_line->next != NULL) + && (cur_line->next->type != FILE_LINE_ACTION)) { cur_line = cur_line->next; line_number++; @@ -4075,8 +3991,8 @@ jb_err cgi_edit_actions_section_swap(struct client_state *csp, line_number++; } - if ( (cur_line == NULL) - || (cur_line->type != FILE_LINE_ACTION) ) + if ((cur_line == NULL) + || (cur_line->type != FILE_LINE_ACTION)) { /* Invalid "section1" parameter */ edit_free_file(file); @@ -4107,8 +4023,8 @@ jb_err cgi_edit_actions_section_swap(struct client_state *csp, line_number++; } - if ( (cur_line == NULL) - || (cur_line->type != FILE_LINE_ACTION) ) + if ((cur_line == NULL) + || (cur_line->type != FILE_LINE_ACTION)) { /* Invalid "section2" parameter */ edit_free_file(file); @@ -4183,7 +4099,7 @@ jb_err cgi_edit_actions_section_swap(struct client_state *csp, * * Description : Converts a string into a form JavaScript will like. * - * Netscape 4's JavaScript sucks - it doesn't use + * Netscape 4's JavaScript sucks - it doesn't use * "id" parameters, so you have to set the "name" * used to submit a form element to something JavaScript * will like. (Or access the elements by index in an