Skip to content

Commit e2f0114

Browse files
committed
Add C++ DCHECKs on read path for aligned buffers, aligned file block offset, lengths
Change-Id: I732e3b5a3cc3c31e0d07e979ec4c057f0694035d
1 parent 3d64c9f commit e2f0114

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

cpp/src/arrow/ipc/reader.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "arrow/table.h"
3535
#include "arrow/tensor.h"
3636
#include "arrow/type.h"
37+
#include "arrow/util/bit-util.h"
3738
#include "arrow/util/logging.h"
3839
#include "arrow/visitor_inline.h"
3940

@@ -59,6 +60,9 @@ class IpcComponentSource {
5960
*out = nullptr;
6061
return Status::OK();
6162
} else {
63+
DCHECK(BitUtil::IsMultipleOf8(buffer->offset()))
64+
<< "Buffer " << buffer_index
65+
<< " did not start on 8-byte aligned offset: " << buffer->offset();
6266
return file_->ReadAt(buffer->offset(), buffer->length(), out);
6367
}
6468
}
@@ -550,6 +554,10 @@ class RecordBatchFileReader::RecordBatchFileReaderImpl {
550554
DCHECK_LT(i, num_record_batches());
551555
FileBlock block = record_batch(i);
552556

557+
DCHECK(BitUtil::IsMultipleOf8(block.offset));
558+
DCHECK(BitUtil::IsMultipleOf8(block.metadata_length));
559+
DCHECK(BitUtil::IsMultipleOf8(block.body_length));
560+
553561
std::unique_ptr<Message> message;
554562
RETURN_NOT_OK(
555563
ReadMessage(block.offset, block.metadata_length, file_.get(), &message));
@@ -564,6 +572,11 @@ class RecordBatchFileReader::RecordBatchFileReaderImpl {
564572
// Read all the dictionaries
565573
for (int i = 0; i < num_dictionaries(); ++i) {
566574
FileBlock block = dictionary(i);
575+
576+
DCHECK(BitUtil::IsMultipleOf8(block.offset));
577+
DCHECK(BitUtil::IsMultipleOf8(block.metadata_length));
578+
DCHECK(BitUtil::IsMultipleOf8(block.body_length));
579+
567580
std::unique_ptr<Message> message;
568581
RETURN_NOT_OK(
569582
ReadMessage(block.offset, block.metadata_length, file_.get(), &message));

0 commit comments

Comments
 (0)