From: Daniel Stenberg Date: Thu, 16 May 2024 07:07:31 +0000 (+0200) Subject: libtest: 2308 verifies CURLE_WRITE_ERROR after write callback error X-Git-Tag: curl-8_8_0~31 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9b802e2d1930961a7305eac2c63679de0fe80176;p=thirdparty%2Fcurl.git libtest: 2308 verifies CURLE_WRITE_ERROR after write callback error Verifies that the issue in #13669 actually is fixed. This return code is what the CURLOPT_WRITEFUNCTION manpage documents should be returned. This code is mostly from the Source-written-by: Trumeet on github Closes #13671 --- diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc index 6f6b179241..ffb0b8e369 100644 --- a/tests/data/Makefile.inc +++ b/tests/data/Makefile.inc @@ -247,6 +247,7 @@ test2100 \ test2200 test2201 test2202 test2203 test2204 test2205 \ \ test2300 test2301 test2302 test2303 test2304 test2305 test2306 test2307 \ +test2308 \ \ test2400 test2401 test2402 test2403 test2404 test2405 test2406 \ \ diff --git a/tests/data/test2308 b/tests/data/test2308 new file mode 100644 index 0000000000..3881d353db --- /dev/null +++ b/tests/data/test2308 @@ -0,0 +1,57 @@ + + + +HTTP +HTTP GET + + +# +# This reproduces the #13669 issue + + +HTTP/1.1 200 OK +Date: Tue, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake +Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT +ETag: "21025-dc7-39462498" +Accept-Ranges: bytes +Content-Length: 6 +Content-Type: text/html +Funny-head: yesyes + +-foo- + + + +# Client-side + + +http + +# tool to run + +lib%TESTNUMBER + + + +verify return code when write callback returns error + + +http://%HOSTIP:%HTTPPORT/%TESTNUMBER + + + +# +# Verify data after the test has been "shot" + + +GET /%TESTNUMBER HTTP/1.1 +Host: %HOSTIP:%HTTPPORT +Accept: */* + + + +Returned 23, should be 23. + + + diff --git a/tests/libtest/Makefile.inc b/tests/libtest/Makefile.inc index 65cc73a912..1a11895e76 100644 --- a/tests/libtest/Makefile.inc +++ b/tests/libtest/Makefile.inc @@ -73,7 +73,7 @@ noinst_PROGRAMS = chkhostname libauthretry libntlmconnect libprereq \ lib1945 lib1946 lib1947 lib1948 lib1955 lib1956 lib1957 lib1958 lib1959 \ lib1960 lib1964 \ lib1970 lib1971 lib1972 lib1973 lib1974 lib1975 \ - lib2301 lib2302 lib2304 lib2305 lib2306 \ + lib2301 lib2302 lib2304 lib2305 lib2306 lib2308 \ lib2402 lib2404 lib2405 \ lib2502 \ lib3010 lib3025 lib3026 lib3027 \ @@ -677,6 +677,9 @@ lib2305_LDADD = $(TESTUTIL_LIBS) lib2306_SOURCES = lib2306.c $(SUPPORTFILES) lib2306_LDADD = $(TESTUTIL_LIBS) +lib2308_SOURCES = lib2308.c $(SUPPORTFILES) +lib2308_LDADD = $(TESTUTIL_LIBS) + lib2402_SOURCES = lib2402.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) lib2402_LDADD = $(TESTUTIL_LIBS) diff --git a/tests/libtest/lib2308.c b/tests/libtest/lib2308.c new file mode 100644 index 0000000000..7751a15052 --- /dev/null +++ b/tests/libtest/lib2308.c @@ -0,0 +1,54 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include "test.h" +#include "testtrace.h" + +#include + +static size_t cb_curl(void *buffer, size_t size, size_t nmemb, void *userp) +{ + (void)buffer; + (void)size; + (void)nmemb; + (void)userp; + return CURL_WRITEFUNC_ERROR; +} + +CURLcode test(char *URL) +{ + CURL *curl; + CURLcode res = CURLE_OK; + + global_init(CURL_GLOBAL_ALL); + curl = curl_easy_init(); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, cb_curl); + curl_easy_setopt(curl, CURLOPT_URL, URL); + res = curl_easy_perform(curl); + printf("Returned %d, should be %d.\n", res, CURLE_WRITE_ERROR); + fflush(stdout); + curl_easy_cleanup(curl); + curl_global_cleanup(); + return CURLE_OK; +}