]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Pull request #4832: appid: fix ASAN issue in AppIdHttpSession::set_req_body_field
authorDenys Zikratyi -X (dzikraty - SOFTSERVE INC at Cisco) <dzikraty@cisco.com>
Fri, 1 Aug 2025 00:47:24 +0000 (00:47 +0000)
committerRayen Mohanty (ramohant) <ramohant@cisco.com>
Fri, 1 Aug 2025 00:47:24 +0000 (00:47 +0000)
Merge in SNORT/snort3 from ~DZIKRATY/snort3:fix_asan_issue to master

Squashed commit of the following:

commit 6769d89cff774a17cb6b28ccedefaa928b874228
Author: Denys Zikratyi -X (dzikraty - SOFTSERVE INC at Cisco) <dzikraty@cisco.com>
Date:   Thu Jul 24 04:39:28 2025 -0400

    appid: fix ASAN issue in AppIdHttpSession::set_req_body_field

src/network_inspectors/appid/appid_http_session.cc
src/network_inspectors/appid/test/appid_http_session_test.cc

index a40aec761933c115682caf02c1ebe76fae00f1d0..ab00491e41f6cea5c3c44976a1adefa22311231b 100644 (file)
@@ -842,7 +842,7 @@ void AppIdHttpSession::set_req_body_field(HttpFieldIds id, const uint8_t* str, i
         {
             std::string* req_body = new std::string(*meta_data[id]);
             delete meta_data[id];
-            req_body->append((const char*)str);
+            req_body->append((const char*)str, len);
             meta_data[id] = req_body;
         }
         set_http_change_bits(change_bits, id);
index 6df648fea3856f841d1143cb1932029df43551fa..a7d2f692c6b7113a93d02157b09ea062a09e38cd 100644 (file)
@@ -337,6 +337,34 @@ TEST(appid_http_session, change_bits_for_referred_appid)
     CHECK_EQUAL(change_bits.test(APPID_REFERRED_BIT), true);
 }
 
+TEST(appid_http_session, set_req_body_field)
+{
+    AppidChangeBits change_bits;
+    const uint8_t test_data1[] = {'a'};
+    const uint8_t test_data2[] = {'b', '1'};
+    const uint8_t test_data3[] = {'c', '2'};
+
+    // Test 1: Setting initial request body field
+    mock_hsession->set_req_body_field(REQ_BODY_FID, test_data1, sizeof(test_data1[0]), change_bits);
+    
+    const std::string* field = mock_hsession->get_field(REQ_BODY_FID);
+    CHECK(field != nullptr);
+    STRCMP_EQUAL(field->c_str(), "a");
+    
+    // Test 2: Appending to existing request body field
+    mock_hsession->set_req_body_field(REQ_BODY_FID, test_data2, sizeof(test_data2[0]), change_bits);
+    
+    field = mock_hsession->get_field(REQ_BODY_FID);
+    CHECK(field != nullptr);
+    STRCMP_EQUAL(field->c_str(), "ab");
+    
+    mock_hsession->set_req_body_field(REQ_BODY_FID, test_data3, sizeof(test_data3[0]), change_bits);
+
+    field = mock_hsession->get_field(REQ_BODY_FID);
+    CHECK(field != nullptr);
+    STRCMP_EQUAL(field->c_str(), "abc");
+}
+
 int main(int argc, char** argv)
 {
     int rc = CommandLineTestRunner::RunAllTests(argc, argv);