diff options
author | Sebastian Rasmussen <sebras@gmail.com> | 2014-04-22 00:41:59 +0200 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2014-04-22 19:29:05 +0100 |
commit | 959f70ff9e15d77b043bf49d8065dafbf0757903 (patch) | |
tree | 8f2201e77b4d0b9855cab49cd6c899d440fea579 /platform | |
parent | a384d20ff9ea220635b6c38282b73d7c33af944a (diff) | |
download | mupdf-959f70ff9e15d77b043bf49d8065dafbf0757903.tar.xz |
Handle errors from curl by eventually throwing
Previously errors from curl_easy_perform() were never checked. This
caused mupdf to enter an eternal loop, repeatedly trying to get data
to parse from the remote host.
Diffstat (limited to 'platform')
-rw-r--r-- | platform/x11/curl_stream.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/platform/x11/curl_stream.c b/platform/x11/curl_stream.c index d90ce288..90206700 100644 --- a/platform/x11/curl_stream.c +++ b/platform/x11/curl_stream.c @@ -45,6 +45,7 @@ struct curl_stream_state_s int kill_thread; void (*more_data)(void *, int); void *more_data_arg; + const char *error; unsigned char public_buffer[4096]; @@ -252,6 +253,7 @@ fetch_chunk(curl_stream_state *state) { char text[32]; int fill, start, end; + CURLcode ret; lock(state); @@ -302,7 +304,9 @@ fetch_chunk(curl_stream_state *state) end = state->content_length-1; snprintf(text, 32, "%d-%d", start, end); curl_easy_setopt(state->handle, CURLOPT_RANGE, text); - curl_easy_perform(state->handle); + ret = curl_easy_perform(state->handle); + if (ret != CURLE_OK) + state->error = curl_easy_strerror(ret); } static void @@ -322,6 +326,9 @@ stream_next(fz_stream *stream, int len) int left_over = (-read_point) & (BLOCK_SIZE-1); unsigned char *buf = state->public_buffer; + if (state->error != NULL) + fz_throw(stream->ctx, FZ_ERROR_GENERIC, "cannot fetch data: %s", state->error); + if (len > sizeof(state->public_buffer)) len = sizeof(state->public_buffer); |