Skip to content

Commit 283e172

Browse files
committed
fix: skip parsing of unrecognized FDv2 stream events
1 parent 729da73 commit 283e172

3 files changed

Lines changed: 33 additions & 0 deletions

File tree

libs/internal/include/launchdarkly/fdv2_protocol_handler.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,13 @@ class FDv2ProtocolHandler {
9595
*/
9696
void Reset();
9797

98+
/**
99+
* @return true if event_type is one that the protocol handler recognizes
100+
* and may dispatch on. Events outside this set are spec-defined as
101+
* "unrecognized data that can be safely ignored".
102+
*/
103+
static bool IsKnownEvent(std::string_view event_type);
104+
98105
FDv2ProtocolHandler() = default;
99106

100107
private:

libs/internal/src/fdv2_protocol_handler.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ static char const* const kGoodbye = "goodbye";
1414

1515
using Error = FDv2ProtocolHandler::Error;
1616

17+
bool FDv2ProtocolHandler::IsKnownEvent(std::string_view event_type) {
18+
return event_type == kServerIntent || event_type == kPutObject ||
19+
event_type == kDeleteObject || event_type == kPayloadTransferred ||
20+
event_type == kError || event_type == kGoodbye;
21+
}
22+
1723
FDv2ProtocolHandler::Result FDv2ProtocolHandler::HandleEvent(
1824
std::string_view event_type,
1925
boost::json::value const& data) {

libs/server-sdk/tests/fdv2_streaming_synchronizer_test.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,26 @@ TEST(FDv2StreamingSynchronizerTest, ServerErrorEventReturnsInterrupted) {
574574
std::string::npos);
575575
}
576576

577+
TEST(FDv2StreamingSynchronizerTest, UnknownEventWithGarbageBodyIsIgnored) {
578+
auto logger = MakeNullLogger();
579+
IoContextRunner runner;
580+
581+
FDv2StreamingSynchronizer synchronizer(
582+
runner.context().get_executor(), logger,
583+
MakeEndpoints("http://localhost"), MakeHttpProperties(), std::nullopt,
584+
1s);
585+
FDv2StreamingSynchronizerTestPeer::MarkStarted(synchronizer);
586+
587+
auto mock_client = std::make_shared<MockSseClient>();
588+
FDv2StreamingSynchronizerTestPeer::SetSseClient(synchronizer, mock_client);
589+
590+
sse::Event unknown_with_garbage("whatever", "not json");
591+
FDv2StreamingSynchronizerTestPeer::OnEvent(synchronizer,
592+
unknown_with_garbage);
593+
594+
EXPECT_EQ(mock_client->restart_count_, 0);
595+
}
596+
577597
TEST(FDv2StreamingSynchronizerTest, MalformedJsonEventReturnsInterrupted) {
578598
auto logger = MakeNullLogger();
579599
IoContextRunner runner;

0 commit comments

Comments
 (0)