aboutsummaryrefslogtreecommitdiffstats
path: root/src/input_curl.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-11-21 16:56:10 +0100
committerMax Kellermann <max@duempel.org>2008-11-21 16:56:10 +0100
commit7779e4133a8f4298b04c857b3fd72e45a02f61f1 (patch)
treedabe4abfbcc5448030031dd0de3e260fc668b04f /src/input_curl.c
parenta165ee25e8b32411d31ab63b932c7a056c37cb3b (diff)
downloadmpd-7779e4133a8f4298b04c857b3fd72e45a02f61f1.tar.gz
mpd-7779e4133a8f4298b04c857b3fd72e45a02f61f1.tar.xz
mpd-7779e4133a8f4298b04c857b3fd72e45a02f61f1.zip
input_curl: don't do temporary calculations with input_stream.offset
If someone calls seek() with an invalid (negative) offset, the curl implementation of that method returned false, but left this invalid offset in input_stream.offset. Move the calculation to a temporary variable.
Diffstat (limited to 'src/input_curl.c')
-rw-r--r--src/input_curl.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/input_curl.c b/src/input_curl.c
index 7c98cad7c..09f10c3c6 100644
--- a/src/input_curl.c
+++ b/src/input_curl.c
@@ -569,11 +569,10 @@ input_curl_seek(struct input_stream *is, off_t offset, int whence)
switch (whence) {
case SEEK_SET:
- is->offset = offset;
break;
case SEEK_CUR:
- is->offset += offset;
+ offset += is->offset;
break;
case SEEK_END:
@@ -581,20 +580,21 @@ input_curl_seek(struct input_stream *is, off_t offset, int whence)
/* stream size is not known */
return false;
- is->offset = is->size + offset;
+ offset += is->size;
break;
default:
return false;
}
- if (is->offset < 0)
+ if (offset < 0)
return false;
/* close the old connection and open a new one */
input_curl_easy_free(c);
+ is->offset = offset;
if (is->offset == is->size) {
/* seek to EOF: simulate empty result; avoid
triggering a "416 Requested Range Not Satisfiable"