]> granicus.if.org Git - curl/commitdiff
url.c: add a compile-time check that CURL_MAX_WRITE_SIZE is large enough
authorDan Fandrich <dan@coneharvesters.com>
Sat, 13 May 2017 20:54:59 +0000 (22:54 +0200)
committerDan Fandrich <dan@coneharvesters.com>
Sat, 13 May 2017 21:21:27 +0000 (23:21 +0200)
Some code (e.g. Curl_fillreadbuffer) assumes that this buffer is not
exceedingly tiny and will break if it is. This same check is already
done at run time in the CURLOPT_BUFFERSIZE option.

docs/libcurl/opts/CURLOPT_BUFFERSIZE.3
lib/url.c

index 5d9b065af76746c83ee636e226376d44c70a979f..b4100e6079c143139a2f23b111517f24ba3807b5 100644 (file)
@@ -37,7 +37,8 @@ This is just treated as a request, not an order. You cannot be guaranteed to
 actually get the given size.
 
 This buffer size is by default \fICURL_MAX_WRITE_SIZE\fP (16kB). The maximum
-buffer size allowed to set is \fICURL_MAX_READ_SIZE\fP (512kB).
+buffer size allowed to be set is \fICURL_MAX_READ_SIZE\fP (512kB). The minimum
+buffer size allowed to be set is 1024.
 .SH DEFAULT
 CURL_MAX_WRITE_SIZE (16kB)
 .SH PROTOCOLS
index 073c4331bd1d66b0f2354931b7ac6fa89863f4b5..8e470b0e175a1e320c8572dbe2202d182c74c8e9 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -144,6 +144,15 @@ static unsigned int get_protocol_family(unsigned int protocol);
 #define READBUFFER_MAX  CURL_MAX_READ_SIZE
 #define READBUFFER_MIN  1024
 
+/* Some parts of the code (e.g. chunked encoding) assume this buffer has at
+ * more than just a few bytes to play with. Don't let it become too small or
+ * bad things will happen.
+ */
+#if READBUFFER_SIZE < READBUFFER_MIN
+# error READBUFFER_SIZE is too small
+#endif
+
+
 /*
  * Protocol table.
  */