PYTHON-951 - Raise CorruptGridFile for truncated chunks.
This commit is contained in:
parent
06e7649da1
commit
5fcc5c72ac
@ -434,6 +434,9 @@ class GridOut(object):
|
||||
|
||||
chunk_data = chunk["data"][self.__position % chunk_size:]
|
||||
|
||||
if not chunk_data:
|
||||
raise CorruptGridFile("truncated chunk")
|
||||
|
||||
self.__position += len(chunk_data)
|
||||
self.__buffer = EMPTY
|
||||
return chunk_data
|
||||
|
||||
@ -24,12 +24,12 @@ import threading
|
||||
import time
|
||||
import gridfs
|
||||
|
||||
from bson.binary import Binary
|
||||
from bson.py3compat import u, StringIO, string_type
|
||||
from pymongo.mongo_client import MongoClient
|
||||
from pymongo.errors import ConfigurationError, ConnectionFailure
|
||||
from pymongo.read_preferences import ReadPreference
|
||||
from gridfs.errors import (FileExists,
|
||||
NoFile)
|
||||
from gridfs.errors import CorruptGridFile, FileExists, NoFile
|
||||
from test.test_replica_set_client import TestReplicaSetClientBase
|
||||
from test import (client_context,
|
||||
unittest,
|
||||
@ -159,6 +159,19 @@ class TestGridfs(IntegrationTest):
|
||||
self.assertEqual(255 * 1024, raw["chunkSize"])
|
||||
self.assertTrue(isinstance(raw["md5"], string_type))
|
||||
|
||||
def test_corrupt_chunk(self):
|
||||
files_id = self.fs.put(b'foobar')
|
||||
self.db.fs.chunks.update_one({'files_id': files_id},
|
||||
{'$set': {'data': Binary(b'foo', 0)}})
|
||||
try:
|
||||
out = self.fs.get(files_id)
|
||||
self.assertRaises(CorruptGridFile, out.read)
|
||||
|
||||
out = self.fs.get(files_id)
|
||||
self.assertRaises(CorruptGridFile, out.readline)
|
||||
finally:
|
||||
self.fs.delete(files_id)
|
||||
|
||||
def test_delete_ensures_index(self):
|
||||
# setUp has dropped collections.
|
||||
names = self.db.collection_names()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user