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
This commit is contained in:
Patrick Monnerat 2021-10-25 13:54:57 +02:00 коммит произвёл Daniel Stenberg
Родитель 8d9af7062b
Коммит fa84ce347f
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 5CC908FDB71E12C2
1 изменённых файлов: 5 добавлений и 3 удалений

Просмотреть файл

@ -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) &&