Skip to content

Commit bcfb10e

Browse files
committed
v3.15.1
1 parent b7e0310 commit bcfb10e

7 files changed

Lines changed: 82 additions & 74 deletions

File tree

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ if(CMAKE_BINARY_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
3535
endif()
3636

3737
project(Catch2
38-
VERSION 3.15.0 # CML version placeholder, don't delete
38+
VERSION 3.15.1 # CML version placeholder, don't delete
3939
LANGUAGES CXX
4040
HOMEPAGE_URL "https://github.com/catchorg/Catch2"
4141
DESCRIPTION "A modern, C++-native, unit test framework."

docs/release-notes.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
# Release notes
44
**Contents**<br>
5+
[3.15.1](#3151)<br>
56
[3.15.0](#3150)<br>
67
[3.14.0](#3140)<br>
78
[3.13.0](#3130)<br>
@@ -75,6 +76,13 @@
7576
[Even Older versions](#even-older-versions)<br>
7677

7778

79+
## 3.15.1
80+
81+
### Fixes
82+
* Fixed potential OOB access when looking for start of broken UTF-8 sequence during linebreaking (#3096)
83+
* Fixed `TEMPLATE_LIST_TEST_CASE_METHOD` and `CATCH_TEMPLATE_PRODUCT_TEST_CASE` potentially causing ODR violations (#3161)
84+
85+
7886
## 3.15.0
7987

8088
### Fixes

extras/catch_amalgamated.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
// SPDX-License-Identifier: BSL-1.0
88

9-
// Catch v3.15.0
10-
// Generated: 2026-05-12 13:08:21.086523
9+
// Catch v3.15.1
10+
// Generated: 2026-06-14 10:51:56.053498
1111
// ----------------------------------------------------------
1212
// This file is an amalgamation of multiple different files.
1313
// You probably shouldn't edit it directly.
@@ -2394,7 +2394,7 @@ namespace Catch {
23942394
}
23952395

23962396
Version const& libraryVersion() {
2397-
static Version version( 3, 15, 0, "", 0 );
2397+
static Version version( 3, 15, 1, "", 0 );
23982398
return version;
23992399
}
24002400

@@ -8016,8 +8016,8 @@ namespace Catch {
80168016
m_it--;
80178017
}
80188018
// Skip back over UTF-8 continuation bytes to the leading byte
8019-
while ( isUtf8ContinuationByte( *m_it ) ) {
8020-
assert( m_it != m_string->begin() );
8019+
while ( m_it != m_string->begin() &&
8020+
isUtf8ContinuationByte( *m_it ) ) {
80218021
m_it--;
80228022
}
80238023
}

extras/catch_amalgamated.hpp

Lines changed: 65 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
// SPDX-License-Identifier: BSL-1.0
88

9-
// Catch v3.15.0
10-
// Generated: 2026-05-12 13:08:20.543985
9+
// Catch v3.15.1
10+
// Generated: 2026-06-14 10:51:55.600632
1111
// ----------------------------------------------------------
1212
// This file is an amalgamation of multiple different files.
1313
// You probably shouldn't edit it directly.
@@ -7079,42 +7079,42 @@ namespace Catch {
70797079
INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEMPLATE_TEST_CLASS_ ), INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEMPLATE_TEST_ ) , ClassName, Name, Tags, Signature, __VA_ARGS__ ) )
70807080
#endif
70817081

7082-
#define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2(TestNameClass, TestName, ClassName, Name, Tags, Signature, TmplTypes, TypesList)\
7083-
CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
7084-
CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
7085-
CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
7086-
CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
7087-
CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
7088-
template<typename TestType> \
7089-
struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName <TestType>) { \
7090-
void test();\
7091-
};\
7092-
namespace {\
7093-
namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestNameClass) {\
7094-
INTERNAL_CATCH_TYPE_GEN \
7095-
INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\
7096-
template<typename...Types>\
7097-
struct TestNameClass{\
7098-
void reg_tests(){\
7099-
std::size_t index = 0;\
7100-
using expander = std::size_t[];\
7101-
constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TmplTypes))};\
7102-
constexpr char const* types_list[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TypesList))};\
7103-
constexpr auto num_types = sizeof(types_list) / sizeof(types_list[0]);\
7104-
(void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + '<' + types_list[index % num_types] + '>', Tags } ), index++)... };/* NOLINT */ \
7105-
}\
7106-
};\
7107-
static const int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
7108-
using TestInit = typename create<TestNameClass, decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS(TmplTypes)>(Catch::Detail::priority_tag<1>{})), TypeList<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(INTERNAL_CATCH_REMOVE_PARENS(TypesList))>>::type;\
7109-
TestInit t;\
7110-
t.reg_tests();\
7111-
return 0;\
7112-
}(); \
7113-
}\
7114-
}\
7115-
CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
7082+
#define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2(TestNameClass, TestName, ClassName, Name, Tags, Signature, TmplTypes, TypesList)\
7083+
CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
7084+
CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
7085+
CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
7086+
CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
7087+
CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
7088+
namespace {\
71167089
template<typename TestType> \
7117-
void TestName<TestType>::test()
7090+
struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName <TestType>) { \
7091+
void test();\
7092+
};\
7093+
namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestNameClass) {\
7094+
INTERNAL_CATCH_TYPE_GEN \
7095+
INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\
7096+
template<typename...Types>\
7097+
struct TestNameClass{\
7098+
void reg_tests(){\
7099+
std::size_t index = 0;\
7100+
using expander = std::size_t[];\
7101+
constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TmplTypes))};\
7102+
constexpr char const* types_list[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TypesList))};\
7103+
constexpr auto num_types = sizeof(types_list) / sizeof(types_list[0]);\
7104+
(void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + '<' + types_list[index % num_types] + '>', Tags } ), index++)... };/* NOLINT */ \
7105+
}\
7106+
};\
7107+
static const int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
7108+
using TestInit = typename create<TestNameClass, decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS(TmplTypes)>(Catch::Detail::priority_tag<1>{})), TypeList<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(INTERNAL_CATCH_REMOVE_PARENS(TypesList))>>::type;\
7109+
TestInit t;\
7110+
t.reg_tests();\
7111+
return 0;\
7112+
}(); \
7113+
}\
7114+
}\
7115+
CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
7116+
template<typename TestType> \
7117+
void TestName<TestType>::test()
71187118

71197119
#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
71207120
#define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( ClassName, Name, Tags, ... )\
@@ -7132,37 +7132,37 @@ namespace Catch {
71327132
INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEMPLATE_TEST_ ), INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEMPLATE_TEST_ ), ClassName, Name, Tags, Signature,__VA_ARGS__ ) )
71337133
#endif
71347134

7135-
#define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD_2( TestNameClass, TestName, ClassName, Name, Tags, TmplList) \
7136-
CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
7137-
CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
7138-
CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
7139-
CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
7140-
CATCH_INTERNAL_SUPPRESS_COMMA_WARNINGS \
7135+
#define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD_2( TestNameClass, TestName, ClassName, Name, Tags, TmplList) \
7136+
CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
7137+
CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
7138+
CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
7139+
CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
7140+
CATCH_INTERNAL_SUPPRESS_COMMA_WARNINGS \
7141+
namespace {\
71417142
template<typename TestType> \
71427143
struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName <TestType>) { \
71437144
void test();\
71447145
};\
7145-
namespace {\
7146-
namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){ \
7147-
INTERNAL_CATCH_TYPE_GEN\
7148-
template<typename...Types>\
7149-
struct TestNameClass{\
7150-
void reg_tests(){\
7151-
size_t index = 0;\
7152-
using expander = size_t[];\
7153-
(void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName##_catch_sr, Catch::NameAndTags{ Name " - " INTERNAL_CATCH_STRINGIZE(TmplList) " - " + std::to_string(index), Tags } ), index++)... };/* NOLINT */ \
7154-
}\
7155-
};\
7156-
static const int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
7157-
using TestInit = typename convert<TestNameClass, TmplList>::type;\
7158-
TestInit t;\
7159-
t.reg_tests();\
7160-
return 0;\
7161-
}(); \
7162-
}}\
7163-
CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
7164-
template<typename TestType> \
7165-
void TestName<TestType>::test()
7146+
namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){ \
7147+
INTERNAL_CATCH_TYPE_GEN\
7148+
template<typename...Types>\
7149+
struct TestNameClass{\
7150+
void reg_tests(){\
7151+
size_t index = 0;\
7152+
using expander = size_t[];\
7153+
(void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName##_catch_sr, Catch::NameAndTags{ Name " - " INTERNAL_CATCH_STRINGIZE(TmplList) " - " + std::to_string(index), Tags } ), index++)... };/* NOLINT */ \
7154+
}\
7155+
};\
7156+
static const int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
7157+
using TestInit = typename convert<TestNameClass, TmplList>::type;\
7158+
TestInit t;\
7159+
t.reg_tests();\
7160+
return 0;\
7161+
}(); \
7162+
}}\
7163+
CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
7164+
template<typename TestType> \
7165+
void TestName<TestType>::test()
71667166

71677167
#define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD(ClassName, Name, Tags, TmplList) \
71687168
INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEMPLATE_TEST_ ), INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEMPLATE_TEST_ ), ClassName, Name, Tags, TmplList )
@@ -7570,7 +7570,7 @@ namespace Catch {
75707570

75717571
#define CATCH_VERSION_MAJOR 3
75727572
#define CATCH_VERSION_MINOR 15
7573-
#define CATCH_VERSION_PATCH 0
7573+
#define CATCH_VERSION_PATCH 1
75747574

75757575
#endif // CATCH_VERSION_MACROS_HPP_INCLUDED
75767576

meson.build

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
project(
99
'catch2',
1010
'cpp',
11-
version: '3.15.0', # CML version placeholder, don't delete
11+
version: '3.15.1', # CML version placeholder, don't delete
1212
license: 'BSL-1.0',
1313
meson_version: '>=0.54.1',
1414
)

src/catch2/catch_version.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ namespace Catch {
3636
}
3737

3838
Version const& libraryVersion() {
39-
static Version version( 3, 15, 0, "", 0 );
39+
static Version version( 3, 15, 1, "", 0 );
4040
return version;
4141
}
4242

src/catch2/catch_version_macros.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010

1111
#define CATCH_VERSION_MAJOR 3
1212
#define CATCH_VERSION_MINOR 15
13-
#define CATCH_VERSION_PATCH 0
13+
#define CATCH_VERSION_PATCH 1
1414

1515
#endif // CATCH_VERSION_MACROS_HPP_INCLUDED

0 commit comments

Comments
 (0)