@@ -1414,22 +1414,32 @@ Status FuzzReader(std::unique_ptr<FileReader> reader) {
14141414} // namespace
14151415
14161416Status 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