Skip to content

Commit a4ea04c

Browse files
committed
Guard against PHP-237 - PYTHON-290
1 parent ef0c3fe commit a4ea04c

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

gridfs/grid_file.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ def getter(self):
5555
if closed_only and not self._closed:
5656
raise AttributeError("can only get %r on a closed file" %
5757
field_name)
58+
# Protect against PHP-237
59+
if field_name == 'length':
60+
return self._file.get(field_name, 0)
5861
return self._file.get(field_name, None)
5962

6063
def setter(self, value):

test/test_gridfs.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,20 @@ def test_put_unicode(self):
289289
self.assertEqual(u"aé".encode("iso-8859-1"), self.fs.get(oid).read())
290290
self.assertEqual("iso-8859-1", self.fs.get(oid).encoding)
291291

292+
def test_missing_length_iter(self):
293+
# Test fix that guards against PHP-237
294+
self.fs.put("", filename="empty")
295+
doc = self.db.fs.files.find_one({"filename": "empty"})
296+
doc.pop("length")
297+
self.db.fs.files.save(doc)
298+
f = self.fs.get_last_version(filename="empty")
299+
300+
def iterate_file(grid_file):
301+
for chunk in grid_file:
302+
pass
303+
return True
304+
305+
self.assertTrue(iterate_file(f))
292306

293307
if __name__ == "__main__":
294308
unittest.main()

0 commit comments

Comments
 (0)