Skip to content

Commit 5eb02fd

Browse files
committed
Don't segfault on invalid BSON PYTHON-252
1 parent e8e1913 commit 5eb02fd

File tree

2 files changed

+7
-0
lines changed

2 files changed

+7
-0
lines changed

bson/_cbsonmodule.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1235,6 +1235,12 @@ static PyObject* elements_to_dict(const char* string, int max,
12351235
while (position < max) {
12361236
int type = (int)string[position++];
12371237
int name_length = strlen(string + position);
1238+
if (position + name_length >= max) {
1239+
PyObject* InvalidBSON = _error("InvalidBSON");
1240+
PyErr_SetNone(InvalidBSON);
1241+
Py_DECREF(InvalidBSON);
1242+
return NULL;
1243+
}
12381244
PyObject* name = PyUnicode_DecodeUTF8(string + position, name_length, "strict");
12391245
PyObject* value;
12401246
if (!name) {

test/test_bson.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ def test_basic_validation(self):
6868
self.assertFalse(is_valid("\x05\x00\x00\x00\x01"))
6969
self.assertFalse(is_valid("\x05\x00\x00\x00"))
7070
self.assertFalse(is_valid("\x05\x00\x00\x00\x00\x00"))
71+
self.assertFalse(is_valid("\x07\x00\x00\x00\x02a\x00\x78\x56\x34\x12"))
7172

7273
def test_random_data_is_not_bson(self):
7374
qcheck.check_unittest(self, qcheck.isnt(is_valid),

0 commit comments

Comments
 (0)