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