Skip to content

Commit 4bbdd6a

Browse files
committed
Improve fuzz target slightly by reading metadata only once
1 parent efa842a commit 4bbdd6a

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

cpp/src/parquet/arrow/reader.cc

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1414,22 +1414,32 @@ Status FuzzReader(std::unique_ptr<FileReader> reader) {
14141414
} // namespace
14151415

14161416
Status FuzzReader(const uint8_t* data, int64_t size) {
1417-
auto buffer = std::make_shared<::arrow::Buffer>(data, size);
14181417
Status st;
1418+
1419+
auto buffer = std::make_shared<::arrow::Buffer>(data, size);
1420+
auto file = std::make_shared<::arrow::io::BufferReader>(buffer);
1421+
auto pool = ::arrow::default_memory_pool();
1422+
1423+
// Read Parquet file metadata only once, which will reduce iteration time slightly
1424+
std::shared_ptr<FileMetaData> pq_md;
1425+
BEGIN_PARQUET_CATCH_EXCEPTIONS
1426+
pq_md = ParquetFileReader::Open(file)->metadata();
1427+
END_PARQUET_CATCH_EXCEPTIONS
1428+
14191429
// Note that very small batch sizes probably make fuzzing slower
14201430
for (auto batch_size : std::vector<std::optional<int>>{std::nullopt, 13, 300}) {
1421-
auto file = std::make_shared<::arrow::io::BufferReader>(buffer);
1422-
FileReaderBuilder builder;
14231431
ArrowReaderProperties properties;
14241432
if (batch_size) {
14251433
properties.set_batch_size(batch_size.value());
14261434
}
1427-
builder.properties(properties);
14281435

1429-
RETURN_NOT_OK(builder.Open(std::move(file)));
1436+
std::unique_ptr<ParquetFileReader> pq_file_reader;
1437+
BEGIN_PARQUET_CATCH_EXCEPTIONS
1438+
pq_file_reader = ParquetFileReader::Open(file, default_reader_properties(), pq_md);
1439+
END_PARQUET_CATCH_EXCEPTIONS
14301440

14311441
std::unique_ptr<FileReader> reader;
1432-
RETURN_NOT_OK(builder.Build(&reader));
1442+
RETURN_NOT_OK(FileReader::Make(pool, std::move(pq_file_reader), properties, &reader));
14331443
st &= FuzzReader(std::move(reader));
14341444
}
14351445
return st;

0 commit comments

Comments
 (0)