From df60a5fa975615d463885e40e8723343acbaa44e Mon Sep 17 00:00:00 2001 From: "A. Jesse Jiryu Davis" Date: Mon, 16 Dec 2013 11:32:24 -0500 Subject: [PATCH] Off-by-one in GridOut.readline(). --- gridfs/grid_file.py | 2 +- test/test_grid_file.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gridfs/grid_file.py b/gridfs/grid_file.py index 388922f80..42dbd3a6d 100644 --- a/gridfs/grid_file.py +++ b/gridfs/grid_file.py @@ -511,7 +511,7 @@ class GridOut(object): for pos in xrange(len(chunk_data)): byte = chunk_data[pos] if byte == EMPTY or byte == NEWLN: - size = received + pos + size = received + pos + 1 break received += len(chunk_data) diff --git a/test/test_grid_file.py b/test/test_grid_file.py index d07a5a721..405a5a120 100644 --- a/test/test_grid_file.py +++ b/test/test_grid_file.py @@ -396,6 +396,7 @@ Hope all is well. Bye""")) f.close() + # Try read(), then readline(). g = GridOut(self.db.fs, f._id) self.assertEqual(b("H"), g.read(1)) self.assertEqual(b("ello world,\n"), g.readline()) @@ -406,6 +407,19 @@ Bye""")) self.assertEqual(b("Bye"), g.readline()) self.assertEqual(b(""), g.readline()) + # Try readline() first, then read(). + g = GridOut(self.db.fs, f._id) + self.assertEqual(b("He"), g.readline(2)) + self.assertEqual(b("l"), g.read(1)) + self.assertEqual(b("lo"), g.readline(2)) + self.assertEqual(b(" world,\n"), g.readline()) + + # Only readline(). + g = GridOut(self.db.fs, f._id) + self.assertEqual(b("H"), g.readline(1)) + self.assertEqual(b("e"), g.readline(1)) + self.assertEqual(b("llo world,\n"), g.readline()) + def test_iterator(self): f = GridIn(self.db.fs) f.close()