@@ -77,6 +77,8 @@ if(NOT (DEFINED ENV{SANITIZER} AND "$ENV{SANITIZER}" STREQUAL "memory"))
7777 -DPEDANTIC
7878 -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
7979 no -shared
80+ no -docs
81+ no -tests
8082 ${OPENSSL_ASM_FLAG}
8183 enable-tls1_3
8284 enable-rc5
@@ -173,6 +175,33 @@ ExternalProject_Add(
173175)
174176set (LIBIDN2_STATIC_LIB ${LIBIDN2_INSTALL_DIR} /lib/libidn2.a)
175177
178+ # Install librtmp only if using OpenSSL
179+ if (TARGET openssl_external)
180+ set (LIBRTMP_URL git://git.ffmpeg.org/rtmpdump)
181+ set (LIBRTMP_INSTALL_DIR ${CMAKE_BINARY_DIR} /librtmp-install )
182+
183+ ExternalProject_Add(
184+ librtmp_external
185+ GIT_REPOSITORY ${LIBRTMP_URL}
186+ GIT_SHALLOW 1
187+ PREFIX ${CMAKE_BINARY_DIR} /librtmp
188+ SOURCE_SUBDIR librtmp
189+ CONFIGURE_COMMAND ""
190+ BUILD_COMMAND ${CMAKE_SOURCE_DIR} /scripts/build_rtmp.sh <SOURCE_DIR> ${LIBRTMP_INSTALL_DIR} ${OPENSSL_INSTALL_DIR} ${ZLIB_INSTALL_DIR}
191+ INSTALL_COMMAND $(MAKE) prefix =${LIBRTMP_INSTALL_DIR} SHARED= install
192+ BUILD_IN_SOURCE 1
193+ DOWNLOAD_EXTRACT_TIMESTAMP TRUE
194+ )
195+ set (LIBRTMP_STATIC_LIB ${LIBRTMP_INSTALL_DIR} /lib/librtmp.a)
196+ set (LIBRTMP_DEP librtmp_external)
197+ set (CURL_LIBRTMP_OPTION --with-librtmp=${LIBRTMP_INSTALL_DIR} )
198+ else ()
199+ message (STATUS "Not building librtmp as OpenSSL is not enabled" )
200+ set (LIBRTMP_STATIC_LIB "" )
201+ set (LIBRTMP_DEP "" )
202+ set (CURL_LIBRTMP_OPTION --without-librtmp)
203+ endif ()
204+
176205# Install GDB if GDBMODE is set
177206set (GDB_VERSION 13.2)
178207set (GDB_URL https://ftp.gnu.org/gnu/gdb/gdb-${GDB_VERSION} .tar.gz)
@@ -203,6 +232,7 @@ add_custom_target(deps
203232 nghttp2_external
204233 zstd_external
205234 libidn2_external
235+ ${LIBRTMP_DEP}
206236 ${GDB_DEP}
207237)
208238
@@ -236,6 +266,7 @@ set(CURL_CONFIGURE_COMMAND
236266 --with-nghttp2=${NGHTTP2_INSTALL_DIR}
237267 --with-zstd=${ZSTD_INSTALL_DIR}
238268 --with-libidn2=${LIBIDN2_INSTALL_DIR}
269+ ${CURL_LIBRTMP_OPTION}
239270)
240271
241272set (CURL_POST_INSTALL_COMMAND
@@ -260,6 +291,8 @@ if (DEFINED ENV{CURL_SOURCE_DIR})
260291 BUILD_IN_SOURCE 1
261292 )
262293else ()
294+ # Use the tag from curl-container as it's semver and reasonably up to date.
295+ # renovate: datasource=github-tags depName=curl/curl-container
263296 set (CURL_VERSION 8.14.1)
264297 message (STATUS "Building curl from downloaded source, version ${CURL_VERSION} " )
265298 # The URL needs dots replaced with underscores for curl's release naming convention.
@@ -285,6 +318,7 @@ set(CURL_DEPS
285318 zlib_external
286319 zstd_external
287320 libidn2_external
321+ ${LIBRTMP_DEP}
288322)
289323
290324# Add dependencies for curl
@@ -330,6 +364,7 @@ set(COMMON_FLAGS -g -DCURL_DISABLE_DEPRECATION)
330364set (COMMON_LINK_LIBS
331365 ${CURL_LIB_DIR} /libcurl.a
332366 ${NGHTTP2_STATIC_LIB}
367+ ${LIBRTMP_STATIC_LIB}
333368 ${OPENSSL_STATIC_LIB}
334369 ${ZLIB_STATIC_LIB}
335370 ${ZSTD_STATIC_LIB}
@@ -364,35 +399,27 @@ add_curl_fuzzer(curl_fuzzer_https HTTPS)
364399add_curl_fuzzer(curl_fuzzer_imap IMAP)
365400add_curl_fuzzer(curl_fuzzer_mqtt MQTT)
366401add_curl_fuzzer(curl_fuzzer_pop3 POP3)
402+ add_curl_fuzzer(curl_fuzzer_rtmp RTMP)
367403add_curl_fuzzer(curl_fuzzer_rtsp RTSP)
368404add_curl_fuzzer(curl_fuzzer_smb SMB)
369405add_curl_fuzzer(curl_fuzzer_smtp SMTP)
370406add_curl_fuzzer(curl_fuzzer_tftp TFTP)
371407add_curl_fuzzer(curl_fuzzer_ws WS)
372408
373- # BUFQ fuzzer
374- add_executable (curl_fuzzer_bufq fuzz_bufq.cc)
375- target_compile_options (curl_fuzzer_bufq PRIVATE ${COMMON_FLAGS} )
376- target_include_directories (curl_fuzzer_bufq PRIVATE ${CURL_INCLUDE_DIRS} )
377- target_link_libraries (curl_fuzzer_bufq PRIVATE ${COMMON_LINK_LIBS} )
378- target_link_options (curl_fuzzer_bufq PRIVATE ${COMMON_LINK_OPTIONS} )
379- add_dependencies (curl_fuzzer_bufq ${FUZZ_DEPS} )
380-
381- # URL fuzzer
382- add_executable (fuzz_url fuzz_url.cc)
383- target_compile_options (fuzz_url PRIVATE ${COMMON_FLAGS} )
384- target_include_directories (fuzz_url PRIVATE ${CURL_INCLUDE_DIRS} )
385- target_link_libraries (fuzz_url PRIVATE ${COMMON_LINK_LIBS} )
386- target_link_options (fuzz_url PRIVATE ${COMMON_LINK_OPTIONS} )
387- add_dependencies (fuzz_url ${FUZZ_DEPS} )
388-
389- # Unit test fuzzer
390- add_executable (curl_fuzzer_fnmatch fuzz_fnmatch.cc)
391- target_compile_options (curl_fuzzer_fnmatch PRIVATE ${COMMON_FLAGS} )
392- target_include_directories (curl_fuzzer_fnmatch PRIVATE ${CURL_INCLUDE_DIRS} )
393- target_link_libraries (curl_fuzzer_fnmatch PRIVATE ${COMMON_LINK_LIBS} )
394- target_link_options (curl_fuzzer_fnmatch PRIVATE ${COMMON_LINK_OPTIONS} )
395- add_dependencies (curl_fuzzer_fnmatch ${FUZZ_DEPS} )
409+ # Helper macro to define a fuzzer target with source files
410+ macro (add_curl_fuzzer_sources name sources )
411+ add_executable (${name} ${sources} )
412+ target_compile_options (${name} PRIVATE ${COMMON_FLAGS} )
413+ target_include_directories (${name} PRIVATE ${CURL_INCLUDE_DIRS} )
414+ target_link_libraries (${name} PRIVATE ${COMMON_LINK_LIBS} )
415+ target_link_options (${name} PRIVATE ${COMMON_LINK_OPTIONS} )
416+ add_dependencies (${name} ${FUZZ_DEPS} )
417+ endmacro ()
418+
419+ # Add single file fuzzers
420+ add_curl_fuzzer_sources(curl_fuzzer_bufq fuzz_bufq.cc)
421+ add_curl_fuzzer_sources(fuzz_url fuzz_url.cc)
422+ add_curl_fuzzer_sources(curl_fuzzer_fnmatch fuzz_fnmatch.cc)
396423
397424# Create a custom target for all fuzzers
398425add_custom_target (fuzz
@@ -407,6 +434,7 @@ add_custom_target(fuzz
407434 curl_fuzzer_imap
408435 curl_fuzzer_mqtt
409436 curl_fuzzer_pop3
437+ curl_fuzzer_rtmp
410438 curl_fuzzer_rtsp
411439 curl_fuzzer_smb
412440 curl_fuzzer_smtp
0 commit comments