summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Reisner <dreisner@archlinux.org>2011-10-09 23:03:04 -0400
committerDan McGee <dan@archlinux.org>2011-10-10 19:09:59 -0500
commitabfa8370c0009e415ef2fa97b96c8b042002d92a (patch)
tree0a008a2a20112050adaf9177cf4bb459093b6c40
parent8f414cd040aa11957a443ddda42ad14b83733007 (diff)
downloadpacman-abfa8370c0009e415ef2fa97b96c8b042002d92a.tar.xz
dload: unhook error buffer after transfer finishes
Similar to what we did in edd9ed6a, disconnect the relationship with our stack allocated error buffer from the curl handle. Just as an FTP connection might have some network chatter on teardown causing the progress callback to be triggered, we might also hit an error condition that causes curl to write to our (now out of scope) error buffer. I'm unable to reproduce FS#26327, but I have a suspicion that this should fix it. Signed-off-by: Dave Reisner <dreisner@archlinux.org> Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--lib/libalpm/dload.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c
index 33824be8..83060f97 100644
--- a/lib/libalpm/dload.c
+++ b/lib/libalpm/dload.c
@@ -377,8 +377,11 @@ static int curl_download_internal(struct dload_payload *payload,
/* perform transfer */
payload->curlerr = curl_easy_perform(curl);
- /* immediately unhook the progress callback */
+ /* disconnect relationships from the curl handle for things that might go out
+ * of scope, but could still be touched on connection teardown. This really
+ * only applies to FTP transfers. See FS#26327 for an example. */
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
+ curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, (char *)NULL);
/* was it a success? */
switch(payload->curlerr) {