Skip to content

Commit e422877

Browse files
committed
Fix for gridfs file seek
gridfs file seek had incorrect handling for detecting page migration. Fixed a potential segfault and the underlying conditional. Fixes #155
1 parent 9bb5a07 commit e422877

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

src/mongoc/mongoc-gridfs-file.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -720,14 +720,15 @@ mongoc_gridfs_file_seek (mongoc_gridfs_file_t *file,
720720

721721
BSON_ASSERT (file->length > (int64_t)offset);
722722

723-
if (offset % file->chunk_size != file->pos % file->chunk_size) {
723+
if (offset / file->chunk_size != file->pos / file->chunk_size) {
724724
/** no longer on the same page */
725725

726726
if (file->page) {
727727
if (_mongoc_gridfs_file_page_is_dirty (file->page)) {
728728
_mongoc_gridfs_file_flush_page (file);
729729
} else {
730730
_mongoc_gridfs_file_page_destroy (file->page);
731+
file->page = NULL;
731732
}
732733
}
733734

tests/test-mongoc-gridfs.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,13 @@ test_read (void)
250250
assert (memcmp (iov[0].iov_base, "Bacon ipsu", 10) == 0);
251251
assert (memcmp (iov[1].iov_base, "m dolor si", 10) == 0);
252252

253+
assert (mongoc_gridfs_file_seek (file, 0, SEEK_SET) == 0);
254+
r = mongoc_gridfs_file_readv (file, iov, 2, 20, 0);
255+
256+
assert (r == 20);
257+
assert (memcmp (iov[0].iov_base, "Bacon ipsu", 10) == 0);
258+
assert (memcmp (iov[1].iov_base, "m dolor si", 10) == 0);
259+
253260
mongoc_gridfs_file_destroy (file);
254261

255262
drop_collections (gridfs, &error);

0 commit comments

Comments
 (0)