You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rm...@apache.org on 2022/01/09 19:38:39 UTC
[logging-log4cxx] 01/01: Fix NPE when attempting to cast a null pointer
This is an automated email from the ASF dual-hosted git repository.
rmiddleton pushed a commit to branch null-cast-check
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git
commit daa8ebbbff92102324e3e03bb6ae8c0508ae65a3
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Sun Jan 9 14:38:26 2022 -0500
Fix NPE when attempting to cast a null pointer
---
src/main/include/log4cxx/helpers/object.h | 5 +++++
src/test/cpp/helpers/casttestcase.cpp | 11 ++++++++++-
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/src/main/include/log4cxx/helpers/object.h b/src/main/include/log4cxx/helpers/object.h
index 18b6728..b8382a5 100644
--- a/src/main/include/log4cxx/helpers/object.h
+++ b/src/main/include/log4cxx/helpers/object.h
@@ -121,6 +121,11 @@ template<typename Ret,
bool = std::is_base_of<Type, helpers::Object>::value>
std::shared_ptr<Ret> cast(const std::shared_ptr<Type>& incoming)
{
+ if(!incoming)
+ {
+ return std::shared_ptr<Ret>();
+ }
+
Ret* casted = reinterpret_cast<Ret*>(const_cast<void*>(incoming->cast(Ret::getStaticClass())));
if ( casted )
diff --git a/src/test/cpp/helpers/casttestcase.cpp b/src/test/cpp/helpers/casttestcase.cpp
index e7d8f53..4d2e5ab 100644
--- a/src/test/cpp/helpers/casttestcase.cpp
+++ b/src/test/cpp/helpers/casttestcase.cpp
@@ -33,7 +33,7 @@ LOGUNIT_CLASS(CastTestCase)
LOGUNIT_TEST_SUITE( CastTestCase );
LOGUNIT_TEST(testGoodCast);
LOGUNIT_TEST(testBadCast);
-
+ LOGUNIT_TEST(testNullParameter);
LOGUNIT_TEST_SUITE_END();
public:
@@ -59,6 +59,15 @@ public:
LOGUNIT_ASSERT(!fos);
}
+ void testNullParameter()
+ {
+ OutputStreamPtr out = nullptr;
+
+ FileOutputStreamPtr fos = log4cxx::cast<FileOutputStream>(out);
+
+ LOGUNIT_ASSERT(!fos);
+ }
+
};
LOGUNIT_TEST_SUITE_REGISTRATION(CastTestCase);