tftpd: always use curl's own tftp.h
Using the system's provided arpa/tftp.h and optimizing, GCC 12 detects
and reports a stringop-overread warning:
tftpd.c: In function ‘write_behind.isra’:
tftpd.c:485:12: warning: ‘write’ reading between 1 and 2147483647 bytes from a region of size 0 [-Wstringop-overread]
485 | return write(test->ofile, writebuf, count);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from tftpd.c:71:
/usr/include/arpa/tftp.h:58:30: note: source object ‘tu_data’ of size 0
58 | char tu_data[0]; /* data or error string */
| ^~~~~~~
This occurs because writebuf points to this field and the latter
cannot be considered as being of dynamic length because it is not
the last field in the structure. Thus it is bound to its declared
size.
This commit always uses curl's own version of tftp.h where the
target field is last in its structure, effectively avoiding the
warning.
As HAVE_ARPA_TFTP_H is not used anymore, cmake/configure checks for
arpa/tftp.h are removed.
Closes #11897
diff --git a/CMake/Platforms/WindowsCache.cmake b/CMake/Platforms/WindowsCache.cmake
index 44a1fc9..6a87566 100644
--- a/CMake/Platforms/WindowsCache.cmake
+++ b/CMake/Platforms/WindowsCache.cmake
@@ -53,7 +53,6 @@
set(HAVE_LIBZ 0)
set(HAVE_ARPA_INET_H 0)
- set(HAVE_ARPA_TFTP_H 0)
set(HAVE_FCNTL_H 1)
set(HAVE_IFADDRS_H 0)
set(HAVE_IO_H 1)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1a2e08d..4583848 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1035,7 +1035,6 @@
check_include_file_concat("sys/utime.h" HAVE_SYS_UTIME_H)
check_include_file_concat("sys/xattr.h" HAVE_SYS_XATTR_H)
check_include_file_concat("arpa/inet.h" HAVE_ARPA_INET_H)
-check_include_file_concat("arpa/tftp.h" HAVE_ARPA_TFTP_H)
check_include_file_concat("fcntl.h" HAVE_FCNTL_H)
check_include_file_concat("idn2.h" HAVE_IDN2_H)
check_include_file_concat("ifaddrs.h" HAVE_IFADDRS_H)
diff --git a/configure.ac b/configure.ac
index 15fbda1..a2c8e2e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3443,7 +3443,6 @@
libgen.h \
locale.h \
stdbool.h \
- arpa/tftp.h \
sys/filio.h \
sys/wait.h \
setjmp.h,
diff --git a/lib/curl_config.h.cmake b/lib/curl_config.h.cmake
index 65901a2..328a77d 100644
--- a/lib/curl_config.h.cmake
+++ b/lib/curl_config.h.cmake
@@ -162,9 +162,6 @@
/* Define to 1 if you have the <arpa/inet.h> header file. */
#cmakedefine HAVE_ARPA_INET_H 1
-/* Define to 1 if you have the <arpa/tftp.h> header file. */
-#cmakedefine HAVE_ARPA_TFTP_H 1
-
/* Define to 1 if you have _Atomic support. */
#cmakedefine HAVE_ATOMIC 1
diff --git a/tests/server/tftpd.c b/tests/server/tftpd.c
index 8bcd452..8db82ff 100644
--- a/tests/server/tftpd.c
+++ b/tests/server/tftpd.c
@@ -67,11 +67,6 @@
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
-#ifdef HAVE_ARPA_TFTP_H
-#include <arpa/tftp.h>
-#else
-#include "tftp.h"
-#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
@@ -97,6 +92,7 @@
#include "getpart.h"
#include "util.h"
#include "server_sockaddr.h"
+#include "tftp.h"
/* include memdebug.h last */
#include "memdebug.h"