Loading lib/formdata.c +54 −14 Original line number Diff line number Diff line Loading @@ -370,7 +370,7 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, struct curl_httppost **last_post, va_list params) { FormInfo *first_form, *current_form, *form; FormInfo *first_form, *current_form, *form = NULL; CURLFORMcode return_value = CURL_FORMADD_OK; const char *prevtype = NULL; struct curl_httppost *post = NULL; Loading Loading @@ -490,6 +490,9 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, array_value:va_arg(params, char *); if (filename) { current_form->value = strdup(filename); if(!current_form->value) return_value = CURL_FORMADD_MEMORY; else current_form->flags |= HTTPPOST_READFILE; } else Loading Loading @@ -517,11 +520,17 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, return_value = CURL_FORMADD_OPTION_TWICE; } else { if (filename) if (filename) { current_form->value = strdup(filename); if(!current_form->value) return_value = CURL_FORMADD_MEMORY; else { current_form->flags |= HTTPPOST_FILENAME; current_form->value_alloc = TRUE; } } else return_value = CURL_FORMADD_NULL; current_form->flags |= HTTPPOST_FILENAME; } break; } Loading @@ -545,8 +554,11 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, return_value = CURL_FORMADD_OPTION_TWICE; } else { if (filename) if (filename) { current_form->value = strdup(filename); if(!current_form->value) return_value = CURL_FORMADD_MEMORY; } else return_value = CURL_FORMADD_NULL; current_form->flags |= HTTPPOST_BUFFER; Loading Loading @@ -595,8 +607,13 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, return_value = CURL_FORMADD_OPTION_TWICE; } else { if (contenttype) if (contenttype) { current_form->contenttype = strdup(contenttype); if(!current_form->contenttype) return_value = CURL_FORMADD_MEMORY; else current_form->contenttype_alloc = TRUE; } else return_value = CURL_FORMADD_NULL; } Loading @@ -623,8 +640,13 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, va_arg(params, char *); if( current_form->showfilename ) return_value = CURL_FORMADD_OPTION_TWICE; else else { current_form->showfilename = strdup(filename); if(!current_form->showfilename) return_value = CURL_FORMADD_MEMORY; else current_form->showfilename_alloc = TRUE; } break; } default: Loading Loading @@ -663,6 +685,11 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, /* our contenttype is missing */ form->contenttype = strdup(ContentTypeForFilename(form->value, prevtype)); if(!form->contenttype) { return_value = CURL_FORMADD_MEMORY; break; } form->contenttype_alloc = TRUE; } if ( !(form->flags & HTTPPOST_PTRNAME) && (form == first_form) ) { Loading Loading @@ -705,12 +732,20 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, } } if(return_value && form) { if(return_value) { /* we return on error, free possibly allocated fields */ if(!form) form = current_form; if(form) { if(form->name_alloc) free(form->name); if(form->value_alloc) free(form->value); if(form->contenttype_alloc) free(form->contenttype); if(form->showfilename_alloc) free(form->showfilename); } } /* always delete the allocated memory before returning */ Loading Loading @@ -840,6 +875,9 @@ void Curl_formclean(struct FormData *form) { struct FormData *next; if(!form) return; do { next=form->next; /* the following form line */ free(form->line); /* free the line */ Loading Loading @@ -907,6 +945,8 @@ CURLcode Curl_getFormData(struct FormData **finalform, return result; /* no input => no output! */ boundary = Curl_FormBoundary(); if(!boundary) return CURLE_OUT_OF_MEMORY; /* Make the first line of the output */ result = AddFormDataf(&form, NULL, Loading Loading @@ -1054,14 +1094,14 @@ CURLcode Curl_getFormData(struct FormData **finalform, if (result) break; } if(fileread != stdin) fclose(fileread); if (result) { Curl_formclean(firstform); free(boundary); return result; } if(fileread != stdin) fclose(fileread); } else { Curl_formclean(firstform); Loading lib/formdata.h +2 −0 Original line number Diff line number Diff line Loading @@ -45,11 +45,13 @@ typedef struct FormInfo { bool value_alloc; size_t contentslength; char *contenttype; bool contenttype_alloc; long flags; char *buffer; /* pointer to existing buffer used for file upload */ size_t bufferlength; char *showfilename; /* The file name to show. If not set, the actual file name will be used */ bool showfilename_alloc; struct curl_slist* contentheader; struct FormInfo *more; } FormInfo; Loading Loading
lib/formdata.c +54 −14 Original line number Diff line number Diff line Loading @@ -370,7 +370,7 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, struct curl_httppost **last_post, va_list params) { FormInfo *first_form, *current_form, *form; FormInfo *first_form, *current_form, *form = NULL; CURLFORMcode return_value = CURL_FORMADD_OK; const char *prevtype = NULL; struct curl_httppost *post = NULL; Loading Loading @@ -490,6 +490,9 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, array_value:va_arg(params, char *); if (filename) { current_form->value = strdup(filename); if(!current_form->value) return_value = CURL_FORMADD_MEMORY; else current_form->flags |= HTTPPOST_READFILE; } else Loading Loading @@ -517,11 +520,17 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, return_value = CURL_FORMADD_OPTION_TWICE; } else { if (filename) if (filename) { current_form->value = strdup(filename); if(!current_form->value) return_value = CURL_FORMADD_MEMORY; else { current_form->flags |= HTTPPOST_FILENAME; current_form->value_alloc = TRUE; } } else return_value = CURL_FORMADD_NULL; current_form->flags |= HTTPPOST_FILENAME; } break; } Loading @@ -545,8 +554,11 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, return_value = CURL_FORMADD_OPTION_TWICE; } else { if (filename) if (filename) { current_form->value = strdup(filename); if(!current_form->value) return_value = CURL_FORMADD_MEMORY; } else return_value = CURL_FORMADD_NULL; current_form->flags |= HTTPPOST_BUFFER; Loading Loading @@ -595,8 +607,13 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, return_value = CURL_FORMADD_OPTION_TWICE; } else { if (contenttype) if (contenttype) { current_form->contenttype = strdup(contenttype); if(!current_form->contenttype) return_value = CURL_FORMADD_MEMORY; else current_form->contenttype_alloc = TRUE; } else return_value = CURL_FORMADD_NULL; } Loading @@ -623,8 +640,13 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, va_arg(params, char *); if( current_form->showfilename ) return_value = CURL_FORMADD_OPTION_TWICE; else else { current_form->showfilename = strdup(filename); if(!current_form->showfilename) return_value = CURL_FORMADD_MEMORY; else current_form->showfilename_alloc = TRUE; } break; } default: Loading Loading @@ -663,6 +685,11 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, /* our contenttype is missing */ form->contenttype = strdup(ContentTypeForFilename(form->value, prevtype)); if(!form->contenttype) { return_value = CURL_FORMADD_MEMORY; break; } form->contenttype_alloc = TRUE; } if ( !(form->flags & HTTPPOST_PTRNAME) && (form == first_form) ) { Loading Loading @@ -705,12 +732,20 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, } } if(return_value && form) { if(return_value) { /* we return on error, free possibly allocated fields */ if(!form) form = current_form; if(form) { if(form->name_alloc) free(form->name); if(form->value_alloc) free(form->value); if(form->contenttype_alloc) free(form->contenttype); if(form->showfilename_alloc) free(form->showfilename); } } /* always delete the allocated memory before returning */ Loading Loading @@ -840,6 +875,9 @@ void Curl_formclean(struct FormData *form) { struct FormData *next; if(!form) return; do { next=form->next; /* the following form line */ free(form->line); /* free the line */ Loading Loading @@ -907,6 +945,8 @@ CURLcode Curl_getFormData(struct FormData **finalform, return result; /* no input => no output! */ boundary = Curl_FormBoundary(); if(!boundary) return CURLE_OUT_OF_MEMORY; /* Make the first line of the output */ result = AddFormDataf(&form, NULL, Loading Loading @@ -1054,14 +1094,14 @@ CURLcode Curl_getFormData(struct FormData **finalform, if (result) break; } if(fileread != stdin) fclose(fileread); if (result) { Curl_formclean(firstform); free(boundary); return result; } if(fileread != stdin) fclose(fileread); } else { Curl_formclean(firstform); Loading
lib/formdata.h +2 −0 Original line number Diff line number Diff line Loading @@ -45,11 +45,13 @@ typedef struct FormInfo { bool value_alloc; size_t contentslength; char *contenttype; bool contenttype_alloc; long flags; char *buffer; /* pointer to existing buffer used for file upload */ size_t bufferlength; char *showfilename; /* The file name to show. If not set, the actual file name will be used */ bool showfilename_alloc; struct curl_slist* contentheader; struct FormInfo *more; } FormInfo; Loading