1
0
mirror of https://github.com/moparisthebest/curl synced 2024-08-13 17:03:50 -04:00

curl_formparse() should no longer have any size-limit in the data section

after this patch from Peter Todd
This commit is contained in:
Daniel Stenberg 2001-08-13 06:33:26 +00:00
parent f8c357e4ff
commit b49565308f

View File

@ -102,7 +102,7 @@ int FormParse(char *input,
/* nextarg MUST be a string in the format 'name=contents' and we'll /* nextarg MUST be a string in the format 'name=contents' and we'll
build a linked list with the info */ build a linked list with the info */
char name[256]; char name[256];
char contents[4096]=""; char *contents;
char major[128]; char major[128];
char minor[128]; char minor[128];
long flags = 0; long flags = 0;
@ -115,7 +115,12 @@ int FormParse(char *input,
struct HttpPost *subpost; /* a sub-node */ struct HttpPost *subpost; /* a sub-node */
unsigned int i; unsigned int i;
if(1 <= sscanf(input, "%255[^=]=%4095[^\n]", name, contents)) { /* Preallocate contents to the length of input to make sure we don't
overwrite anything. */
contents = malloc(strlen(input));
contents[0] = '\000';
if(1 <= sscanf(input, "%255[^=]=%[^\n]", name, contents)) {
/* the input was using the correct format */ /* the input was using the correct format */
contp = contents; contp = contents;
@ -156,6 +161,7 @@ int FormParse(char *input,
if(2 != sscanf(type, "%127[^/]/%127[^,\n]", if(2 != sscanf(type, "%127[^/]/%127[^,\n]",
major, minor)) { major, minor)) {
fprintf(stderr, "Illegally formatted content-type field!\n"); fprintf(stderr, "Illegally formatted content-type field!\n");
free(contents);
return 2; /* illegal content-type syntax! */ return 2; /* illegal content-type syntax! */
} }
/* now point beyond the content-type specifier */ /* now point beyond the content-type specifier */
@ -287,8 +293,10 @@ int FormParse(char *input,
} }
else { else {
fprintf(stderr, "Illegally formatted input field!\n"); fprintf(stderr, "Illegally formatted input field!\n");
free(contents);
return 1; return 1;
} }
free(contents);
return 0; return 0;
} }