Skip to content

Commit 41b4227

Browse files
committed
prevent overflow
1 parent 91b92e2 commit 41b4227

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

src/sentry_envelope.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "sentry_transport.h"
1111
#include "sentry_value.h"
1212
#include <assert.h>
13+
#include <limits.h>
1314
#include <string.h>
1415

1516
struct sentry_envelope_item_s {
@@ -821,7 +822,8 @@ sentry_envelope_deserialize(const char *buf, size_t buf_len)
821822
item->payload_len = (size_t)payload_len;
822823
}
823824
if (item->payload_len > 0) {
824-
if (ptr + item->payload_len > end) {
825+
if (ptr + item->payload_len > end
826+
|| item->payload_len > INT32_MAX - 1) {
825827
goto fail;
826828
}
827829
item->payload = sentry_malloc(item->payload_len + 1);

tests/unit/test_envelopes.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -670,4 +670,8 @@ SENTRY_TEST(deserialize_envelope_invalid)
670670
TEST_CHECK(!sentry_envelope_deserialize("{}\n{}", 5));
671671
TEST_CHECK(!sentry_envelope_deserialize("{}\ninvalid\n", 11));
672672
TEST_CHECK(!sentry_envelope_deserialize("invalid", 7));
673+
TEST_CHECK(!sentry_envelope_deserialize("{}\n{\"length\":-1}\n", 17));
674+
char buf[128];
675+
snprintf(buf, sizeof(buf), "{}\n{\"length\":%d}\n", INT32_MAX);
676+
TEST_CHECK(!sentry_envelope_deserialize(buf, strlen(buf)));
673677
}

0 commit comments

Comments
 (0)