← Commit list

7d7fa4d7dd

Daniel Stenberg
Daniel Stenberg
2026-09-10
SUCCESS Duration: 420s

Subject

easy: duplicating a zero byte memory area needs no malloc

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

lib/easy.c+3 -3
@@ -957,10 +957,10 @@ static CURLcode dupset(struct Curl_easy *dst, struct Curl_easy *src)
if(src->set.postfieldsize == -1)
dst->set.str_copypostfields = curlx_strdup(src->set.str_copypostfields);
else
- /* postfieldsize is curl_off_t, curlx_memdup() takes a size_t ... */
+ /* postfieldsize is curl_off_t, curlx_memdup0() takes a size_t ... */
dst->set.str_copypostfields =
- curlx_memdup(src->set.str_copypostfields,
- curlx_sotouz(src->set.postfieldsize));
+ curlx_memdup0(src->set.str_copypostfields,
+ curlx_sotouz(src->set.postfieldsize));
if(!dst->set.str_copypostfields)
return CURLE_OUT_OF_MEMORY;
/* point to the new copy */
tests/data/Makefile.am+1 -1
@@ -1732,7 +1732,7 @@ TESTCASES = \
test1725 \
test1740 \
test1741 \
- \
+ test1791 \
test1800 \
test1801 \
test1802 \
tests/data/test1791+32 -0
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<testcase>
+<info>
+<keywords>
+CURLOPT_POSTFIELDSIZE_LARGE
+duphandle
+</keywords>
+</info>
+
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+
+<name>
+blank COPYPOSTFIELDS and duphandle
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<command>
+localhost
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+</verify>
+</testcase>
tests/libtest/Makefile.inc+1 -0
@@ -242,6 +242,7 @@ TESTS_C = \
lib1662.c \
lib1678.c \
lib1686.c \
+ lib1791.c \
lib1900.c \
lib1901.c \
lib1902.c \
tests/libtest/lib1791.c+59 -0
@@ -0,0 +1,59 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <[email protected]>, 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 "first.h"
+
+static CURLcode test_lib1791(const char *URL)
+{
+ CURL *curl;
+ CURL *copy;
+ CURLcode result = CURLE_OK;
+ (void)URL;
+
+ if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ curl_mfprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ curl = curl_easy_init();
+ if(!curl) {
+ curl_mfprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ (void)curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)0);
+ (void)curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, "");
+
+ copy = curl_easy_duphandle(curl);
+
+ if(copy)
+ curl_easy_cleanup(copy);
+ else
+ result = TEST_ERR_FAILURE;
+
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return result;
+}