mirror of
https://github.com/mat007/turtle.git
synced 2026-06-22 12:13:43 +00:00
Merge pull request #116 from AlexSmithEtas/fix-issue-115-null-c-string-derefs
Avoid dereferencing NULL C-strings Fixes #115
This commit is contained in:
commit
fa29eec0bb
5 changed files with 37 additions and 2 deletions
|
|
@ -39,7 +39,12 @@ class matcher<const char*, const char*>
|
|||
{
|
||||
public:
|
||||
explicit matcher(const char* expected) : expected_(expected) {}
|
||||
bool operator()(const char* actual) { return std::strcmp(actual, expected_) == 0; }
|
||||
bool operator()(const char* actual)
|
||||
{
|
||||
if(!actual || !expected_)
|
||||
return actual == expected_;
|
||||
return std::strcmp(actual, expected_) == 0;
|
||||
}
|
||||
friend std::ostream& operator<<(std::ostream& s, const matcher& m) { return s << mock::format(m.expected_); }
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -106,7 +106,13 @@ namespace detail {
|
|||
{
|
||||
s << '"' << str << '"';
|
||||
}
|
||||
inline void serialize(stream& s, const char* const str) { s << '"' << str << '"'; }
|
||||
inline void serialize(stream& s, const char* const str)
|
||||
{
|
||||
if(str)
|
||||
s << '"' << str << '"';
|
||||
else
|
||||
s << "nullptr";
|
||||
}
|
||||
inline void serialize(stream& s, unsigned char c) { s << static_cast<int>(c); }
|
||||
} // namespace detail
|
||||
} // namespace mock
|
||||
|
|
|
|||
|
|
@ -80,6 +80,15 @@ BOOST_AUTO_TEST_CASE(equal_constraint_deref)
|
|||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(equal_null_c_string)
|
||||
{
|
||||
const char* const null_str = nullptr;
|
||||
|
||||
BOOST_CHECK(mock::equal(null_str).c_(null_str));
|
||||
BOOST_CHECK(!mock::equal(null_str).c_("non-null string"));
|
||||
BOOST_CHECK(!mock::equal("non-null-string").c_(null_str));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(same_constraint)
|
||||
{
|
||||
{
|
||||
|
|
|
|||
|
|
@ -89,6 +89,13 @@ BOOST_AUTO_TEST_CASE(strings_are_serialized_with_double_quotes)
|
|||
BOOST_CHECK_EQUAL("\"string\"", to_string(std::string("string")));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(null_c_strings_are_serialized_to_nullptr)
|
||||
{
|
||||
const char* const null_str = nullptr;
|
||||
BOOST_CHECK_EQUAL("nullptr", to_string(null_str));
|
||||
BOOST_CHECK_EQUAL("\"nullptr\"", to_string("nullptr"));
|
||||
}
|
||||
|
||||
namespace {
|
||||
struct non_serializable
|
||||
{};
|
||||
|
|
|
|||
|
|
@ -75,6 +75,14 @@ BOOST_FIXTURE_TEST_CASE(const_char_pointer_and_std_string_can_be_compared, fixtu
|
|||
BOOST_CHECK(!match(std::string("different text"), actual));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(null_const_char_pointers_can_be_compared)
|
||||
{
|
||||
const char* const null_str = nullptr;
|
||||
BOOST_CHECK(match(null_str, null_str));
|
||||
BOOST_CHECK(!match(null_str, "non-null string"));
|
||||
BOOST_CHECK(!match("non-null string", null_str));
|
||||
}
|
||||
|
||||
namespace {
|
||||
template<typename T>
|
||||
std::string serialize(const T& t)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue