1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-22 08:08:50 -05:00

- Dmitriy Sergeyev pointed out that curl_easy_pause() didn't unpause properly

during certain conditions. I also changed this code to use realloc() based
  on Daniel Fandrich's suggestion.
This commit is contained in:
Daniel Stenberg 2008-09-05 09:37:37 +00:00
parent 747e0c657d
commit 873e734c39
3 changed files with 14 additions and 7 deletions

View File

@ -6,6 +6,11 @@
Changelog Changelog
Daniel Stenberg (5 Sep 2008)
- Dmitriy Sergeyev pointed out that curl_easy_pause() didn't unpause properly
during certain conditions. I also changed this code to use realloc() based
on Daniel Fandrich's suggestion.
Guenter Knauf (4 Sep 2008) Guenter Knauf (4 Sep 2008)
- MingW32 non-configure builds are now largefile feature enabled by default. - MingW32 non-configure builds are now largefile feature enabled by default.
NetWare LIBC builds are also now largefile feature enabled by default. NetWare LIBC builds are also now largefile feature enabled by default.

View File

@ -15,6 +15,7 @@ This release includes the following bugfixes:
o MingW32 non-configure builds are now largefile feature enabled by default o MingW32 non-configure builds are now largefile feature enabled by default
o NetWare LIBC builds are now largefile feature enabled by default o NetWare LIBC builds are now largefile feature enabled by default
o curl_easy_pause() could behave wrongly on unpause
This release includes the following known bugs: This release includes the following known bugs:
@ -27,6 +28,6 @@ Other curl-related news:
This release would not have looked like this without help, code, reports and This release would not have looked like this without help, code, reports and
advice from friends like these: advice from friends like these:
Keith Mok, Yang Tse, Daniel Fandrich, Guenter Knauf Keith Mok, Yang Tse, Daniel Fandrich, Guenter Knauf, Dmitriy Sergeyev
Thanks! (and sorry if I forgot to mention someone) Thanks! (and sorry if I forgot to mention someone)

View File

@ -821,6 +821,7 @@ CURLcode curl_easy_pause(CURL *curl, int action)
return PAUSE again and then we'll get a new copy allocted and stored in return PAUSE again and then we'll get a new copy allocted and stored in
the tempwrite variables */ the tempwrite variables */
char *tempwrite = data->state.tempwrite; char *tempwrite = data->state.tempwrite;
char *freewrite = tempwrite; /* store this pointer to free it later */
size_t tempsize = data->state.tempwritesize; size_t tempsize = data->state.tempwritesize;
int temptype = data->state.tempwritetype; int temptype = data->state.tempwritetype;
size_t chunklen; size_t chunklen;
@ -845,7 +846,7 @@ CURLcode curl_easy_pause(CURL *curl, int action)
result = Curl_client_write(data->state.current_conn, result = Curl_client_write(data->state.current_conn,
temptype, tempwrite, chunklen); temptype, tempwrite, chunklen);
if(!result) if(result)
/* failures abort the loop at once */ /* failures abort the loop at once */
break; break;
@ -858,13 +859,13 @@ CURLcode curl_easy_pause(CURL *curl, int action)
*/ */
char *newptr; char *newptr;
free(data->state.tempwrite); /* free the one just cached as it isn't
enough */
/* note that tempsize is still the size as before the callback was /* note that tempsize is still the size as before the callback was
used, and thus the whole piece of data to keep */ used, and thus the whole piece of data to keep */
newptr = malloc(tempsize); newptr = realloc(data->state.tempwrite, tempsize);
if(!newptr) { if(!newptr) {
free(data->state.tempwrite); /* free old area */
data->state.tempwrite = NULL;
result = CURLE_OUT_OF_MEMORY; result = CURLE_OUT_OF_MEMORY;
/* tempwrite will be freed further down */ /* tempwrite will be freed further down */
break; break;
@ -882,7 +883,7 @@ CURLcode curl_easy_pause(CURL *curl, int action)
} while((result == CURLE_OK) && tempsize); } while((result == CURLE_OK) && tempsize);
free(tempwrite); /* this is unconditionally no longer used */ free(freewrite); /* this is unconditionally no longer used */
} }
return result; return result;