Ignore an SSE retry field that is not all digits (#2591)

parse_sse_line checked only the error code of from_chars, which accepts
a leading '-' and stops at the first non-digit, so retry: -1 made the
client reconnect without waiting and retry: 10s set 10 ms. The SSE spec
ignores a retry value that is not all ASCII digits.
This commit is contained in:
KBS authored and GitHub committed 2026-09-28 15:31:20 -04:00
1 parent c1c2b1f4b4
commit 3330d0eb06
2 files changed
+60 -1

No files matched your search

+2 -1
View File
@@ -4914,7 +4914,8 @@ inline bool SSEClient::parse_sse_line(const std::string &line, SSEMessage &msg,
msg.id = value;
} else if (field == "retry") {
// Parse retry interval in milliseconds
{
// Per the SSE spec, a value that is not all ASCII digits is ignored.
if (detail::is_numeric(value)) {
int v = 0;
auto res =
detail::from_chars(value.data(), value.data() + value.size(), v);