From 2645edf2a99d683a5ea2e53dedfb3b0783ef3183 Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Wed, 7 Oct 2026 14:31:58 -0700 Subject: [PATCH] Fix dangling stack references in ParseGuid and subscription parsing - ParseGuid(data, swapEndianness = true) read through a pointer to a block-scoped array after the block ended; optimized g++ builds returned garbage Guids - ParseSubscriptionRequest bound a const Guid& into a temporary Nullable and used it when building the subscriber signal index cache Co-Authored-By: Claude Opus 5.5 --- src/lib/Convert.cpp | 2 +- src/lib/transport/SubscriberConnection.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/Convert.cpp b/src/lib/Convert.cpp index 33a7742..5d0fc17 100644 --- a/src/lib/Convert.cpp +++ b/src/lib/Convert.cpp @@ -566,11 +566,11 @@ bool sttp::IsGuid(const string& value) Guid sttp::ParseGuid(const uint8_t* data, const bool swapEndianness) { Guid id; + uint8_t swappedBytes[16]; uint8_t* encodedBytes; if (swapEndianness) { - uint8_t swappedBytes[16]; uint8_t copy[8]; for (uint32_t i = 0; i < 16; i++) diff --git a/src/lib/transport/SubscriberConnection.cpp b/src/lib/transport/SubscriberConnection.cpp index 4470cab..f0d6aea 100644 --- a/src/lib/transport/SubscriberConnection.cpp +++ b/src/lib/transport/SubscriberConnection.cpp @@ -1402,7 +1402,7 @@ SignalIndexCachePtr SubscriberConnection::ParseSubscriptionRequest(const string& for (size_t i = 0; i < rows.size(); i++) { const DataRowPtr& row = rows[i]; - const Guid& signalID = row->ValueAsGuid(signalIDColumn).GetValueOrDefault(); + const Guid signalID = row->ValueAsGuid(signalIDColumn).GetValueOrDefault(); string source; uint64_t id;