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

Reply via email to