@@ -404,4 +404,70 @@ NODISCARD inline FuzzedAutoFileProvider ConsumeAutoFile(FuzzedDataProvider& fuzz
404
404
return {fuzzed_data_provider};
405
405
}
406
406
407
+ #define WRITE_TO_STREAM_CASE (id, type, consume ) \
408
+ case id: { \
409
+ type o = consume; \
410
+ stream << o; \
411
+ break ; \
412
+ }
413
+ template <typename Stream>
414
+ void WriteToStream (FuzzedDataProvider& fuzzed_data_provider, Stream& stream) noexcept
415
+ {
416
+ while (fuzzed_data_provider.ConsumeBool ()) {
417
+ try {
418
+ switch (fuzzed_data_provider.ConsumeIntegralInRange <int >(0 , 13 )) {
419
+ WRITE_TO_STREAM_CASE (0 , bool , fuzzed_data_provider.ConsumeBool ())
420
+ WRITE_TO_STREAM_CASE (1 , char , fuzzed_data_provider.ConsumeIntegral <char >())
421
+ WRITE_TO_STREAM_CASE (2 , int8_t , fuzzed_data_provider.ConsumeIntegral <int8_t >())
422
+ WRITE_TO_STREAM_CASE (3 , uint8_t , fuzzed_data_provider.ConsumeIntegral <uint8_t >())
423
+ WRITE_TO_STREAM_CASE (4 , int16_t , fuzzed_data_provider.ConsumeIntegral <int16_t >())
424
+ WRITE_TO_STREAM_CASE (5 , uint16_t , fuzzed_data_provider.ConsumeIntegral <uint16_t >())
425
+ WRITE_TO_STREAM_CASE (6 , int32_t , fuzzed_data_provider.ConsumeIntegral <int32_t >())
426
+ WRITE_TO_STREAM_CASE (7 , uint32_t , fuzzed_data_provider.ConsumeIntegral <uint32_t >())
427
+ WRITE_TO_STREAM_CASE (8 , int64_t , fuzzed_data_provider.ConsumeIntegral <int64_t >())
428
+ WRITE_TO_STREAM_CASE (9 , uint64_t , fuzzed_data_provider.ConsumeIntegral <uint64_t >())
429
+ WRITE_TO_STREAM_CASE (10 , float , fuzzed_data_provider.ConsumeFloatingPoint <float >())
430
+ WRITE_TO_STREAM_CASE (11 , double , fuzzed_data_provider.ConsumeFloatingPoint <double >())
431
+ WRITE_TO_STREAM_CASE (12 , std::string, fuzzed_data_provider.ConsumeRandomLengthString (32 ))
432
+ WRITE_TO_STREAM_CASE (13 , std::vector<char >, ConsumeRandomLengthIntegralVector<char >(fuzzed_data_provider))
433
+ }
434
+ } catch (const std::ios_base::failure&) {
435
+ break ;
436
+ }
437
+ }
438
+ }
439
+
440
+ #define READ_FROM_STREAM_CASE (id, type ) \
441
+ case id: { \
442
+ type o; \
443
+ stream >> o; \
444
+ break ; \
445
+ }
446
+ template <typename Stream>
447
+ void ReadFromStream (FuzzedDataProvider& fuzzed_data_provider, Stream& stream) noexcept
448
+ {
449
+ while (fuzzed_data_provider.ConsumeBool ()) {
450
+ try {
451
+ switch (fuzzed_data_provider.ConsumeIntegralInRange <int >(0 , 13 )) {
452
+ READ_FROM_STREAM_CASE (0 , bool )
453
+ READ_FROM_STREAM_CASE (1 , char )
454
+ READ_FROM_STREAM_CASE (2 , int8_t )
455
+ READ_FROM_STREAM_CASE (3 , uint8_t )
456
+ READ_FROM_STREAM_CASE (4 , int16_t )
457
+ READ_FROM_STREAM_CASE (5 , uint16_t )
458
+ READ_FROM_STREAM_CASE (6 , int32_t )
459
+ READ_FROM_STREAM_CASE (7 , uint32_t )
460
+ READ_FROM_STREAM_CASE (8 , int64_t )
461
+ READ_FROM_STREAM_CASE (9 , uint64_t )
462
+ READ_FROM_STREAM_CASE (10 , float )
463
+ READ_FROM_STREAM_CASE (11 , double )
464
+ READ_FROM_STREAM_CASE (12 , std::string)
465
+ READ_FROM_STREAM_CASE (13 , std::vector<char >)
466
+ }
467
+ } catch (const std::ios_base::failure&) {
468
+ break ;
469
+ }
470
+ }
471
+ }
472
+
407
473
#endif // BITCOIN_TEST_FUZZ_UTIL_H
0 commit comments