From 1182881d0e1ae5f06c814923c05dbf263311d83e Mon Sep 17 00:00:00 2001 From: Evgenii Malygin <2518859+678098@users.noreply.github.com> Date: Thu, 14 May 2026 13:04:53 -0400 Subject: [PATCH 1/3] Fix[ntsa::Event::print]: UB on buffer over-read `stateDescription.append("HANGUP", 12)` tries to read 12 bytes from a 6-byte buffer. --- groups/nts/ntsa/ntsa_event.cpp | 65 ++++++++-------------------------- 1 file changed, 15 insertions(+), 50 deletions(-) diff --git a/groups/nts/ntsa/ntsa_event.cpp b/groups/nts/ntsa/ntsa_event.cpp index 4875f1bf..a38843df 100644 --- a/groups/nts/ntsa/ntsa_event.cpp +++ b/groups/nts/ntsa/ntsa_event.cpp @@ -203,59 +203,24 @@ bsl::ostream& Event::print(bsl::ostream& stream, bsl::string stateDescription; bsl::size_t numFlags = 0; - if ((d_state & (1 << EventType::e_READABLE)) != 0) { - if (numFlags > 0) { - stateDescription.append(1, ' '); - } - - stateDescription.append("READABLE", 8); - ++numFlags; - } - - if ((d_state & (1 << EventType::e_WRITABLE)) != 0) { - if (numFlags > 0) { - stateDescription.append(1, ' '); - } - - stateDescription.append("WRITABLE", 8); - ++numFlags; - } - - if ((d_state & (1 << EventType::e_EXCEPTIONAL)) != 0) { - if (numFlags > 0) { - stateDescription.append(1, ' '); - } - - stateDescription.append("EXCEPTIONAL", 11); - ++numFlags; +#define NTSA_CHECK_PRINT(FLAG, STR) \ + if ((d_state & (1 << (FLAG))) != 0) { \ + if (numFlags > 0) { \ + stateDescription.append(1, ' '); \ + } \ + static const bsl::string_view k_DESC = STR; \ + stateDescription.append(STR); \ + ++numFlags; \ } - if ((d_state & (1 << EventType::e_ERROR)) != 0) { - if (numFlags > 0) { - stateDescription.append(1, ' '); - } + NTSA_CHECK_PRINT(EventType::e_READABLE, "READABLE"); + NTSA_CHECK_PRINT(EventType::e_WRITABLE, "WRITABLE"); + NTSA_CHECK_PRINT(EventType::e_EXCEPTIONAL, "EXCEPTIONAL"); + NTSA_CHECK_PRINT(EventType::e_ERROR, "ERROR"); + NTSA_CHECK_PRINT(EventType::e_SHUTDOWN, "SHUTDOWN"); + NTSA_CHECK_PRINT(EventType::e_HANGUP, "HANGUP"); - stateDescription.append("ERROR", 5); - ++numFlags; - } - - if ((d_state & (1 << EventType::e_SHUTDOWN)) != 0) { - if (numFlags > 0) { - stateDescription.append(1, ' '); - } - - stateDescription.append("SHUTDOWN", 8); - ++numFlags; - } - - if ((d_state & (1 << EventType::e_HANGUP)) != 0) { - if (numFlags > 0) { - stateDescription.append(1, ' '); - } - - stateDescription.append("HANGUP", 12); - ++numFlags; - } +#undef NTSA_CHECK_PRINT printer.printAttribute("state", stateDescription); } From 1080a2d6f732ad7d27dfbbb61a60db3232858200 Mon Sep 17 00:00:00 2001 From: Evgenii Malygin <2518859+678098@users.noreply.github.com> Date: Thu, 14 May 2026 13:08:01 -0400 Subject: [PATCH 2/3] Update ntsa_event.cpp --- groups/nts/ntsa/ntsa_event.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/groups/nts/ntsa/ntsa_event.cpp b/groups/nts/ntsa/ntsa_event.cpp index a38843df..74527959 100644 --- a/groups/nts/ntsa/ntsa_event.cpp +++ b/groups/nts/ntsa/ntsa_event.cpp @@ -208,7 +208,7 @@ bsl::ostream& Event::print(bsl::ostream& stream, if (numFlags > 0) { \ stateDescription.append(1, ' '); \ } \ - static const bsl::string_view k_DESC = STR; \ + static const bsl::string_view k_DESC = (STR); \ stateDescription.append(STR); \ ++numFlags; \ } From 9d573e2e8e5b014155dcd2cd4f074c7037e67e49 Mon Sep 17 00:00:00 2001 From: Evgenii Malygin <2518859+678098@users.noreply.github.com> Date: Thu, 14 May 2026 13:08:33 -0400 Subject: [PATCH 3/3] Update ntsa_event.cpp --- groups/nts/ntsa/ntsa_event.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/groups/nts/ntsa/ntsa_event.cpp b/groups/nts/ntsa/ntsa_event.cpp index 74527959..6c7f54c0 100644 --- a/groups/nts/ntsa/ntsa_event.cpp +++ b/groups/nts/ntsa/ntsa_event.cpp @@ -209,7 +209,7 @@ bsl::ostream& Event::print(bsl::ostream& stream, stateDescription.append(1, ' '); \ } \ static const bsl::string_view k_DESC = (STR); \ - stateDescription.append(STR); \ + stateDescription.append(k_DESC); \ ++numFlags; \ }