This is an automated email from the ASF dual-hosted git repository.
swebb2066 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git
The following commit(s) were added to refs/heads/master by this push:
new 8ef7f6be Prevent a fault in ODBCAppender due to conversion to unsigned
(#626)
8ef7f6be is described below
commit 8ef7f6be58ce457eb00d32acadfa4c447eb95a76
Author: jmestwa-coder <[email protected]>
AuthorDate: Tue Apr 7 09:36:31 2026 +0530
Prevent a fault in ODBCAppender due to conversion to unsigned (#626)
---
src/main/cpp/odbcappender.cpp | 7 ++++++-
src/test/cpp/db/odbcappendertestcase.cpp | 8 ++++++++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/src/main/cpp/odbcappender.cpp b/src/main/cpp/odbcappender.cpp
index fcffe308..f82807a6 100644
--- a/src/main/cpp/odbcappender.cpp
+++ b/src/main/cpp/odbcappender.cpp
@@ -176,7 +176,12 @@ void ODBCAppender::setOption(const LogString& option,
const LogString& value)
{
if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("BUFFERSIZE"),
LOG4CXX_STR("buffersize")))
{
- setBufferSize((size_t)OptionConverter::toInt(value, 1));
+ int parsed = OptionConverter::toInt(value, 1);
+ if (parsed < 0)
+ {
+ parsed = 1;
+ }
+ setBufferSize((size_t) parsed);
}
else if (StringHelper::equalsIgnoreCase(option,
LOG4CXX_STR("PASSWORD"), LOG4CXX_STR("password")))
{
diff --git a/src/test/cpp/db/odbcappendertestcase.cpp
b/src/test/cpp/db/odbcappendertestcase.cpp
index 42483aea..040be189 100644
--- a/src/test/cpp/db/odbcappendertestcase.cpp
+++ b/src/test/cpp/db/odbcappendertestcase.cpp
@@ -39,6 +39,7 @@ class ODBCAppenderTestCase : public AppenderSkeletonTestCase
//
LOGUNIT_TEST(testDefaultThreshold);
LOGUNIT_TEST(testSetOptionThreshold);
+ LOGUNIT_TEST(testNegativeBufferSizeOption);
//#define DataSourceName_Log4cxxTest_Is_Valid
#ifdef DataSourceName_Log4cxxTest_Is_Valid
LOGUNIT_TEST(testConnectUsingDSN);
@@ -59,6 +60,13 @@ class ODBCAppenderTestCase : public AppenderSkeletonTestCase
LogManager::shutdown();
}
+ void testNegativeBufferSizeOption()
+ {
+ db::ODBCAppender appender;
+ appender.setOption(LOG4CXX_STR("BUFFERSIZE"),
LOG4CXX_STR("-10"));
+ LOGUNIT_ASSERT_EQUAL((size_t) 1,
appender.getBufferSize());
+ }
+
// 'odbcAppenderDSN-Log4cxxTest.xml' requires the data souce name 'Log4cxxTest'
// containing a 'ApplicationLogs' database
// with 'UnitTestLog' table