forked from boostorg/regex
Set a limit on max recursions.
Applies to last remaining recursive calls in regex creation, and format string parsing. Added tests, and updated CI.
This commit is contained in:
180
test/Jamfile.v2
180
test/Jamfile.v2
@ -78,149 +78,60 @@ lib boost_regex_recursive :
|
||||
|
||||
local regress-sources = regress/$(R_SOURCE) ;
|
||||
|
||||
test-suite regex
|
||||
:
|
||||
[ run regress/$(R_SOURCE) ../build//boost_regex ../build//icu_options
|
||||
: # command line
|
||||
: # input files
|
||||
: # requirements
|
||||
: regex_regress ]
|
||||
run regress/$(R_SOURCE) ../build//boost_regex ../build//icu_options
|
||||
: # command line
|
||||
: # input files
|
||||
: # requirements
|
||||
: regex_regress ;
|
||||
|
||||
[ run regress/$(R_SOURCE) ../build//boost_regex
|
||||
../../thread/build//boost_thread ../build//icu_options
|
||||
: # command line
|
||||
: # input files
|
||||
: # requirements
|
||||
<define>TEST_THREADS
|
||||
: regex_regress_threaded ]
|
||||
run regress/$(R_SOURCE) ../build//boost_regex
|
||||
../../thread/build//boost_thread ../build//icu_options
|
||||
: # command line
|
||||
: # input files
|
||||
: # requirements
|
||||
<define>TEST_THREADS
|
||||
: regex_regress_threaded ;
|
||||
|
||||
[ run regress/$(R_SOURCE) ../build//boost_regex
|
||||
../../thread/build//boost_thread ../build//icu_options
|
||||
: # command line
|
||||
: # input files
|
||||
: # requirements
|
||||
<define>TEST_THREADS
|
||||
<define>BOOST_REGEX_MAX_CACHE_BLOCKS=0
|
||||
: regex_regress_threaded_no_cache ]
|
||||
|
||||
[ regex-test posix_api_check : c_compiler_checks/posix_api_check.c ]
|
||||
|
||||
[ compile c_compiler_checks/wide_posix_api_check.c
|
||||
: : wide_posix_api_check_c ]
|
||||
|
||||
[ regex-test posix_api_check_cpp : c_compiler_checks/posix_api_check.cpp ]
|
||||
|
||||
[ regex-test wide_posix_api_check_cpp
|
||||
: c_compiler_checks/wide_posix_api_check.cpp ]
|
||||
|
||||
[ run pathology/bad_expression_test.cpp : : :
|
||||
[ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ]
|
||||
]
|
||||
|
||||
[ run pathology/recursion_test.cpp : : :
|
||||
[ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ]
|
||||
]
|
||||
|
||||
[ run named_subexpressions/named_subexpressions_test.cpp : : :
|
||||
[ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ]
|
||||
]
|
||||
|
||||
[ run unicode/unicode_iterator_test.cpp : : :
|
||||
[ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ]
|
||||
release <define>TEST_UTF8 : unicode_iterator_test_utf8 ]
|
||||
[ run unicode/unicode_iterator_test.cpp : : :
|
||||
[ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ]
|
||||
release <define>TEST_UTF16 : unicode_iterator_test_utf16 ]
|
||||
[ run unicode/unicode_casefold_test.cpp
|
||||
../build//boost_regex ../build//icu_options
|
||||
]
|
||||
[ run static_mutex/static_mutex_test.cpp
|
||||
../../thread/build//boost_thread ../build//boost_regex
|
||||
]
|
||||
[ run object_cache/object_cache_test.cpp : : :
|
||||
[ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ]
|
||||
]
|
||||
|
||||
[ run config_info/regex_config_info.cpp
|
||||
../build//boost_regex/<link>static
|
||||
: # command line
|
||||
: # input files
|
||||
: <test-info>always_show_run_output
|
||||
]
|
||||
[ run config_info/regex_config_info.cpp ../build//boost_regex
|
||||
: # command line
|
||||
: # input files
|
||||
: <test-info>always_show_run_output
|
||||
: regex_dll_config_info
|
||||
]
|
||||
|
||||
[ run collate_info/collate_info.cpp ../build//boost_regex
|
||||
: : : <test-info>always_show_run_output : test_collate_info ]
|
||||
|
||||
|
||||
[ link concepts/concept_check.cpp :
|
||||
[ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ]
|
||||
]
|
||||
[ link concepts/concept_check.cpp :
|
||||
<define>BOOST_REGEX_STANDALONE [ check-target-builds ../build//is_legacy_03 : : <build>no ] : standalone_concept_check
|
||||
]
|
||||
[ link concepts/icu_concept_check.cpp :
|
||||
<define>BOOST_REGEX_STANDALONE [ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ]
|
||||
]
|
||||
[ link concepts/icu_concept_check.cpp :
|
||||
[ check-target-builds ../build//is_legacy_03 : : <build>no ] : standalone_icu_concept_check
|
||||
]
|
||||
[ link concepts/range_concept_check.cpp :
|
||||
[ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ]
|
||||
]
|
||||
[ run concepts/test_bug_11988.cpp : : :
|
||||
[ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ]
|
||||
]
|
||||
|
||||
[ run
|
||||
# sources
|
||||
captures/captures_test.cpp
|
||||
../build//icu_options
|
||||
: # additional args
|
||||
: # test-files
|
||||
: # requirements
|
||||
<threading>multi
|
||||
<define>BOOST_REGEX_MATCH_EXTRA=1
|
||||
<define>BOOST_REGEX_NO_LIB=1
|
||||
[ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ]
|
||||
: # test name
|
||||
captures_test
|
||||
]
|
||||
|
||||
[ run regress/$(R_SOURCE) .//boost_regex_recursive
|
||||
../build//icu_options
|
||||
: # command line
|
||||
: # input files
|
||||
: # requirements
|
||||
<define>BOOST_REGEX_RECURSIVE=1
|
||||
<define>BOOST_REGEX_CXX03=1
|
||||
: regex_regress_recursive ]
|
||||
|
||||
[ run regress/$(R_SOURCE) ./noeh_test//boost_regex_noeh
|
||||
../build//icu_options
|
||||
: # command line
|
||||
: # input files
|
||||
: # requirements
|
||||
<define>BOOST_NO_EXCEPTIONS=1
|
||||
<exception-handling>off
|
||||
<link>static
|
||||
<runtime-link>shared
|
||||
: regex_regress_noeh ]
|
||||
|
||||
;
|
||||
run regress/$(R_SOURCE) ../build//boost_regex
|
||||
../../thread/build//boost_thread ../build//icu_options
|
||||
: # command line
|
||||
: # input files
|
||||
: # requirements
|
||||
<define>TEST_THREADS
|
||||
<define>BOOST_REGEX_MAX_CACHE_BLOCKS=0
|
||||
: regex_regress_threaded_no_cache ;
|
||||
|
||||
regex-test posix_api_check : c_compiler_checks/posix_api_check.c ;
|
||||
compile c_compiler_checks/wide_posix_api_check.c : : wide_posix_api_check_c ;
|
||||
regex-test posix_api_check_cpp : c_compiler_checks/posix_api_check.cpp ;
|
||||
regex-test wide_posix_api_check_cpp : c_compiler_checks/wide_posix_api_check.cpp ;
|
||||
run pathology/bad_expression_test.cpp : : : [ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ] ;
|
||||
run pathology/recursion_test.cpp : : : [ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ] ;
|
||||
run named_subexpressions/named_subexpressions_test.cpp : : : [ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ] ;
|
||||
run unicode/unicode_iterator_test.cpp : : : [ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ] release <define>TEST_UTF8 : unicode_iterator_test_utf8 ;
|
||||
run unicode/unicode_iterator_test.cpp : : : [ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ] release <define>TEST_UTF16 : unicode_iterator_test_utf16 ;
|
||||
run unicode/unicode_casefold_test.cpp ../build//boost_regex ../build//icu_options ;
|
||||
run static_mutex/static_mutex_test.cpp ../../thread/build//boost_thread ../build//boost_regex ;
|
||||
run object_cache/object_cache_test.cpp : : : [ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ] ;
|
||||
run config_info/regex_config_info.cpp ../build//boost_regex/<link>static : : : <test-info>always_show_run_output ;
|
||||
run config_info/regex_config_info.cpp ../build//boost_regex : : : <test-info>always_show_run_output : regex_dll_config_info ;
|
||||
run collate_info/collate_info.cpp ../build//boost_regex : : : <test-info>always_show_run_output : test_collate_info ;
|
||||
link concepts/concept_check.cpp : [ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ] ;
|
||||
link concepts/concept_check.cpp : <define>BOOST_REGEX_STANDALONE [ check-target-builds ../build//is_legacy_03 : : <build>no ] : standalone_concept_check ;
|
||||
link concepts/icu_concept_check.cpp : <define>BOOST_REGEX_STANDALONE [ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ] ;
|
||||
link concepts/icu_concept_check.cpp : [ check-target-builds ../build//is_legacy_03 : : <build>no ] : standalone_icu_concept_check ;
|
||||
link concepts/range_concept_check.cpp : [ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ] ;
|
||||
run concepts/test_bug_11988.cpp : : : [ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ] ;
|
||||
run captures/captures_test.cpp ../build//icu_options : : : <threading>multi <define>BOOST_REGEX_MATCH_EXTRA=1 <define>BOOST_REGEX_NO_LIB=1
|
||||
[ check-target-builds ../build//is_legacy_03 : : <source>../build//boost_regex ] : captures_test ;
|
||||
run regress/$(R_SOURCE) .//boost_regex_recursive ../build//icu_options : : : <define>BOOST_REGEX_RECURSIVE=1 <define>BOOST_REGEX_CXX03=1 : regex_regress_recursive ;
|
||||
run regress/$(R_SOURCE) ./noeh_test//boost_regex_noeh ../build//icu_options : : : <define>BOOST_NO_EXCEPTIONS=1 <exception-handling>off <link>static <runtime-link>shared : regex_regress_noeh ;
|
||||
compile test_consolidated.cpp ;
|
||||
|
||||
build-project ../example ;
|
||||
|
||||
# `quick` target (for CI)
|
||||
run quick.cpp ../build//boost_regex ;
|
||||
|
||||
compile test_warnings.cpp
|
||||
: <toolset>msvc:<warnings>all <toolset>msvc:<warnings-as-errors>on
|
||||
<toolset>gcc:<warnings>all <toolset>gcc:<warnings-as-errors>on
|
||||
@ -240,3 +151,4 @@ compile test_windows_defs_3.cpp ;
|
||||
compile test_windows_defs_4.cpp ;
|
||||
|
||||
run issue153.cpp : : : <toolset>msvc:<linkflags>-STACK:2097152 ;
|
||||
run bad_format_string.cpp ;
|
||||
|
32
test/bad_format_string.cpp
Normal file
32
test/bad_format_string.cpp
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2024
|
||||
* John Maddock
|
||||
*
|
||||
* Use, modification and distribution are subject to the
|
||||
* Boost Software License, Version 1.0. (See accompanying file
|
||||
* LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
*
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <boost/regex.hpp>
|
||||
#include <boost/core/lightweight_test.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
try{
|
||||
std::string format_string("(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((");
|
||||
boost::regex e("foo");
|
||||
std::string in("foobar");
|
||||
std::string out;
|
||||
boost::regex_replace(std::back_inserter(out), in.begin(), in.end(),
|
||||
e, format_string, boost::match_default | boost::format_all);
|
||||
BOOST_TEST(false);
|
||||
}
|
||||
catch (const std::runtime_error&)
|
||||
{
|
||||
std::cout << "OK" << std::endl;
|
||||
}
|
||||
return boost::report_errors();
|
||||
}
|
@ -51,5 +51,7 @@ void test_alt()
|
||||
TEST_REGEX_SEARCH("a\nb", grep, "a", match_default, make_array(0, 1, -2, -2));
|
||||
TEST_REGEX_SEARCH("a\nb", egrep, "b", match_default, make_array(0, 1, -2, -2));
|
||||
TEST_REGEX_SEARCH("a\nb", egrep, "a", match_default, make_array(0, 1, -2, -2));
|
||||
// DOS protection:
|
||||
TEST_INVALID_REGEX("(|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||(?0))", perl);
|
||||
}
|
||||
|
||||
|
@ -63,5 +63,7 @@ void test_anchors()
|
||||
TEST_REGEX_SEARCH_W(L"^.", boost::regex::extended, L"\x2028 \x2028", match_default, make_array(0, 1, -2, 1, 2, -2, -2));
|
||||
TEST_REGEX_SEARCH_W(L".$", boost::regex::extended, L" \x2028 \x2028", match_default, make_array(0, 1, -2, 2, 3, -2, 3, 4, -2, -2));
|
||||
#endif
|
||||
// DOS attack prevention:
|
||||
TEST_INVALID_REGEX("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", perl);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user