summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Monnerat <patrick@monnerat.net>2021-10-25 13:54:57 +0200
committerDaniel Stenberg <daniel@haxx.se>2021-10-25 23:33:41 +0200
commitfa84ce347f6e54c6f6ebbd25506aa32f5fe7aa54 (patch)
treea76b2566fef4eede210f74e9a20a9cfc7baec917
parent8d9af7062b3a5beecfa18f17b23c88680fb78dbb (diff)
downloadcurl-fa84ce347f6e54c6f6ebbd25506aa32f5fe7aa54.tar.gz
sendf: accept zero-length data in Curl_client_write()
Historically, Curl_client_write() used a length value of 0 as a marker for a null-terminated data string. This feature has been removed in commit f4b85d2. To detect leftover uses of the feature, a DEBUGASSERT statement rejecting a length with value 0 was introduced, effectively precluding use of this function with zero-length data. The current commit removes the DEBUGASSERT and makes the function to return immediately if length is 0. A direct effect is to fix trying to output a zero-length distinguished name in openldap. Another DEBUGASSERT statement is also rephrased for better readability. Closes #7898
-rw-r--r--lib/sendf.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/sendf.c b/lib/sendf.c
index 14ca84bfe..bcfa27a50 100644
--- a/lib/sendf.c
+++ b/lib/sendf.c
@@ -608,7 +608,7 @@ static CURLcode chop_write(struct Curl_easy *data,
/* Curl_client_write() sends data to the write callback(s)
The bit pattern defines to what "streams" to write to. Body and/or header.
- The defines are in sendf.h of course. "len" is not allowed to be 0.
+ The defines are in sendf.h of course.
If CURL_DO_LINEEND_CONV is enabled, data is converted IN PLACE to the
local character encoding. This is a problem and should be changed in
@@ -621,8 +621,10 @@ CURLcode Curl_client_write(struct Curl_easy *data,
{
struct connectdata *conn = data->conn;
- DEBUGASSERT(len);
- DEBUGASSERT(type <= 3);
+ DEBUGASSERT(!(type & ~CLIENTWRITE_BOTH));
+
+ if(!len)
+ return CURLE_OK;
/* FTP data may need conversion. */
if((type & CLIENTWRITE_BODY) &&