[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [gnurl] 74/125: curl_easy_reset: release mime-related data.
From: |
gnunet |
Subject: |
[GNUnet-SVN] [gnurl] 74/125: curl_easy_reset: release mime-related data. |
Date: |
Sun, 21 Jan 2018 23:42:09 +0100 |
This is an automated email from the git hooks/post-receive script.
ng0 pushed a commit to branch master
in repository gnurl.
commit f009bbe1f625b19236dc2ed57726b2f0f39a27c4
Author: Patrick Monnerat <address@hidden>
AuthorDate: Wed Dec 20 19:33:50 2017 +0100
curl_easy_reset: release mime-related data.
Move curl_mime_initpart() and curl_mime_cleanpart() calls to lower-level
functions dealing with UserDefined structure contents.
This avoids memory leakages on curl-generated part mime headers.
New test 2073 checks this using the cli tool --next option: it
triggers a valgrind error if bug is present.
Bug: https://curl.haxx.se/mail/lib-2017-12/0060.html
Reported-by: Martin Galvan
---
lib/easy.c | 2 +-
lib/url.c | 13 +++++-----
lib/url.h | 2 +-
tests/data/Makefile.inc | 2 +-
tests/data/test2073 | 68 +++++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 78 insertions(+), 9 deletions(-)
diff --git a/lib/easy.c b/lib/easy.c
index 72506488a..75f332b07 100644
--- a/lib/easy.c
+++ b/lib/easy.c
@@ -998,7 +998,7 @@ void curl_easy_reset(struct Curl_easy *data)
/* zero out UserDefined data: */
Curl_freeset(data);
memset(&data->set, 0, sizeof(struct UserDefined));
- (void)Curl_init_userdefined(&data->set);
+ (void)Curl_init_userdefined(data);
/* zero out Progress data: */
memset(&data->progress, 0, sizeof(struct Progress));
diff --git a/lib/url.c b/lib/url.c
index 8e0326219..a4f3f37f8 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -293,6 +293,8 @@ void Curl_freeset(struct Curl_easy *data)
data->change.url_alloc = FALSE;
}
data->change.url = NULL;
+
+ Curl_mime_cleanpart(&data->set.mimepost);
}
/*
@@ -382,8 +384,6 @@ CURLcode Curl_close(struct Curl_easy *data)
Curl_http2_cleanup_dependencies(data);
Curl_convert_close(data);
- Curl_mime_cleanpart(&data->set.mimepost);
-
/* No longer a dirty share, if it exists */
if(data->share) {
Curl_share_lock(data, CURL_LOCK_DATA_SHARE, CURL_LOCK_ACCESS_SINGLE);
@@ -402,8 +402,9 @@ CURLcode Curl_close(struct Curl_easy *data)
* Initialize the UserDefined fields within a Curl_easy.
* This may be safely called on a new or existing Curl_easy.
*/
-CURLcode Curl_init_userdefined(struct UserDefined *set)
+CURLcode Curl_init_userdefined(struct Curl_easy *data)
{
+ struct UserDefined *set = &data->set;
CURLcode result = CURLE_OK;
set->out = stdout; /* default output to stdout */
@@ -453,6 +454,8 @@ CURLcode Curl_init_userdefined(struct UserDefined *set)
/* make libcurl quiet by default: */
set->hide_progress = TRUE; /* CURLOPT_NOPROGRESS changes these */
+ Curl_mime_initpart(&set->mimepost, data);
+
/*
* libcurl 7.10 introduced SSL verification *by default*! This needs to be
* switched off unless wanted.
@@ -569,15 +572,13 @@ CURLcode Curl_open(struct Curl_easy **curl)
result = CURLE_OUT_OF_MEMORY;
}
else {
- Curl_mime_initpart(&data->set.mimepost, data);
-
data->state.headerbuff = malloc(HEADERSIZE);
if(!data->state.headerbuff) {
DEBUGF(fprintf(stderr, "Error: malloc of headerbuff failed\n"));
result = CURLE_OUT_OF_MEMORY;
}
else {
- result = Curl_init_userdefined(&data->set);
+ result = Curl_init_userdefined(data);
data->state.headersize = HEADERSIZE;
Curl_convert_init(data);
diff --git a/lib/url.h b/lib/url.h
index 5dd04fdff..0fdb8cf28 100644
--- a/lib/url.h
+++ b/lib/url.h
@@ -33,7 +33,7 @@
CURLcode Curl_init_do(struct Curl_easy *data, struct connectdata *conn);
CURLcode Curl_open(struct Curl_easy **curl);
-CURLcode Curl_init_userdefined(struct UserDefined *set);
+CURLcode Curl_init_userdefined(struct Curl_easy *data);
CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
va_list arg);
CURLcode Curl_dupset(struct Curl_easy * dst, struct Curl_easy * src);
diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc
index d8721512d..5784bbb58 100644
--- a/tests/data/Makefile.inc
+++ b/tests/data/Makefile.inc
@@ -189,4 +189,4 @@ test2048 test2049 test2050 test2051 test2052 test2053
test2054 test2055 \
test2056 test2057 test2058 test2059 test2060 test2061 test2062 test2063 \
test2064 test2065 test2066 test2067 test2068 test2069 \
\
-test2070 test2071 test2072
+test2070 test2071 test2072 test2073
diff --git a/tests/data/test2073 b/tests/data/test2073
new file mode 100644
index 000000000..ed942f018
--- /dev/null
+++ b/tests/data/test2073
@@ -0,0 +1,68 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP FORMPOST
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 10
+
+contents1
+</data>
+<data1>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 10
+
+contents2
+</data1>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP form posts with handle reset
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/2073 -F 'name=a;filename=a.pdf' --next
http://%HOSTIP:%HTTPPORT/2073 -F 'name=b;filename=b.jpg'
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^(User-Agent:|Content-Type: multipart/form-data;|------------).*
+</strip>
+<protocol>
+POST /2073 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 189
+
+Content-Disposition: form-data; name="name"; filename="a.pdf"
+Content-Type: application/pdf
+
+a
+POST /2073 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Content-Length: 184
+
+Content-Disposition: form-data; name="name"; filename="b.jpg"
+Content-Type: image/jpeg
+
+b
+</protocol>
+</verify>
+</testcase>
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [gnurl] 45/125: curl: remove __EMX__ #ifdefs, (continued)
- [GNUnet-SVN] [gnurl] 45/125: curl: remove __EMX__ #ifdefs, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 57/125: curl.1: documented two missing valid exit codes, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 60/125: RELEASE-NOTES: synced with 3b9ea70ee, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 64/125: THANKS: added missing names, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 86/125: curl_version_info.3: call the argument 'age', gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 43/125: curl: don't set CURLOPT_INTERLEAVEDATA, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 59/125: TODO: Expose tried IP addresses that failed, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 95/125: COPYING: it's 2018!, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 93/125: scripts: allow all perl scripts to be run directly, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 52/125: multi_done: prune DNS cache, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 74/125: curl_easy_reset: release mime-related data.,
gnunet <=
- [GNUnet-SVN] [gnurl] 76/125: curl/system.h: fix compilation with gcc on AIX PPC and IA64 HP-UX, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 71/125: CURLOPT_READFUNCTION.3: refer to argument with correct name, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 77/125: build-openssl.bat: Added support for VC15, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 94/125: progress: calculate transfer speed on milliseconds if possible, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 80/125: winbuild: Added support for VC15, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 116/125: openssl: fix the libressl build again, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 103/125: HTTP: bail out on negative Content-Length: values, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 114/125: curl_fnmatch: only allow 5 '*' sections in a single pattern, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 75/125: examples/rtsp: fix error handling macros, gnunet, 2018/01/21
- [GNUnet-SVN] [gnurl] 117/125: openssl: fix potential memory leak in SSLKEYLOGFILE logic, gnunet, 2018/01/21