[PATCH] Small bugfixes for http-push.c
From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:42:11
Subsystem:
the rest · Maintainer:
Linus Torvalds
This patch fixes three things: - older libexpat does not know about enum XML_Status - as in my patch for http-fetch, do not rely on a curl result in free()d data - calloc the new_lock structure Signed-off-by: Johannes Schindelin <redacted> --- I verified in a small scale test that it works now. The buglets showed only on my iBook, not on any Linux box I tried. The calloc'ing of the new_lock structure is necessary, because activelock_cdata() relies on several members being 0 until set by start_activelock_element(). The problem I was experiencing with a crash in cleanup_multi_handle() was due to the curl result not being interpreted correctly. Unfortunately, valgrind does not work on macosx, so it could not help me. Note: http-push shares a lot of code with http-fetch. It might be a good idea to refactor them (after some more out-ironing). http-push.c | 14 ++++++++++++-- 1 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/http-push.c b/http-push.c
index c10067c..5532d02 100644
--- a/http-push.c
+++ b/http-push.c@@ -28,6 +28,15 @@ static const char http_push_usage[] = #define NO_CURL_EASY_DUPHANDLE #endif +#ifndef XML_STATUS_OK +enum XML_Status { + XML_STATUS_OK = 1, + XML_STATUS_ERROR = 0 +}; +#define XML_STATUS_OK 1 +#define XML_STATUS_ERROR 0 +#endif + #define RANGE_HEADER_SIZE 30 /* DAV method names and request body templates */
@@ -728,11 +737,12 @@ void process_curl_messages(void) slot->curl != curl_message->easy_handle) slot = slot->next; if (slot != NULL) { + int curl_result = curl_message->data.result; curl_multi_remove_handle(curlm, slot->curl); active_requests--; slot->done = 1; slot->in_use = 0; - slot->curl_result = curl_message->data.result; + slot->curl_result = curl_result; curl_easy_getinfo(slot->curl, CURLINFO_HTTP_CODE, &slot->http_code);
@@ -1230,7 +1240,7 @@ struct active_lock *lock_remote(char *fi in_buffer.posn = 0; in_buffer.buffer = in_data; - new_lock = xmalloc(sizeof(*new_lock)); + new_lock = xcalloc(1, sizeof(*new_lock)); new_lock->owner = NULL; new_lock->token = NULL; new_lock->timeout = -1;