@@ -580,7 +580,65 @@ int main([[maybe_unused]] int argc, [[maybe_unused]] const char** argv)
580580 // initialize library
581581 grk_initialize (nullptr , numThreads);
582582
583- // #define TEST_FUZZER
583+ // initialize decompress parameters
584+ grk_decompress_parameters decompressParams = {};
585+ decompressParams.core .skip_allocate_composite = !doStore;
586+ // differential: disable as it breaks differential decompression
587+ if (!doDifferential)
588+ {
589+ decompressParams.asynchronous = true ;
590+ decompressParams.simulate_synchronous = true ;
591+ }
592+
593+ bool fromBuffer = fileOpt->count () == 0 ;
594+ if (dWindowOpt->count () > 0 )
595+ {
596+ decompressParams.dw_x0 = dwindow[0 ];
597+ decompressParams.dw_y0 = dwindow[1 ];
598+ decompressParams.dw_x1 = dwindow[2 ];
599+ decompressParams.dw_y1 = dwindow[3 ];
600+ printf (" Window set to %f,%f,%f,%f\n " , dwindow[0 ], dwindow[1 ], dwindow[2 ], dwindow[3 ]);
601+ }
602+
603+ grk_image* image = nullptr ;
604+ const char * inputFileStr = nullptr ;
605+ bool useCallbacks = false ;
606+ if (useCallbacks && !fromBuffer && isNetwork (inputFilePath))
607+ {
608+ printf (" [WARNING] Disabling callbacks for network file %s\n " , inputFilePath.c_str ());
609+ useCallbacks = false ;
610+ }
611+
612+ bool differentialByLayer = true ;
613+ if (layersOpt->count () > 0 && maxLayers == 0 )
614+ differentialByLayer = false ;
615+ bool differentialByResolution = true ;
616+ if (resOpt->count () > 0 && maxResolutions == 0 )
617+ differentialByResolution = false ;
618+
619+ // if we store, then no need to cache images, otherwise we choose minimum caching - image
620+ uint32_t fullCacheStrategy = doStore ? GRK_TILE_CACHE_NONE : GRK_TILE_CACHE_IMAGE;
621+
622+ // if true, decompress a particular tile, otherwise decompress
623+ // all tiles
624+ bool decompressTile = tileOpt->count () > 0 ;
625+
626+ grk_object* codec_diff = nullptr ;
627+ grk_object* codec_full = nullptr ;
628+ grk_header_info headerInfo = {};
629+ std::pair<grk_object*, bool > drc;
630+
631+ // create j2k file stream
632+ inputFileStr = inputFilePath.c_str ();
633+ if (fromBuffer)
634+ printf (" Decompressing buffer\n " );
635+ else
636+ printf (" Decompressing file %s\n " , inputFilePath.c_str ());
637+
638+ grk_stream_params streamParams = {};
639+ ReadStreamInfoExample sinfo (&streamParams);
640+
641+ #define TEST_FUZZER
584642#ifdef TEST_FUZZER
585643 {
586644 grk_header_info headerInfo = {};
@@ -592,6 +650,7 @@ int main([[maybe_unused]] int argc, [[maybe_unused]] const char** argv)
592650 size_t len = 0 ;
593651 uint8_t * buf = nullptr ;
594652 FILE* file = nullptr ;
653+ size_t bytesRead = 0 ;
595654
596655 auto cleanup = [&]() {
597656 if (buf)
@@ -626,7 +685,7 @@ int main([[maybe_unused]] int argc, [[maybe_unused]] const char** argv)
626685 }
627686
628687 // Read file into buffer
629- size_t bytesRead = fread (buf, 1 , len, file);
688+ bytesRead = fread (buf, 1 , len, file);
630689 if (bytesRead != len)
631690 {
632691 fprintf (stderr, " Failed to read file: %s\n " , inputFilePath.c_str ());
@@ -636,11 +695,14 @@ int main([[maybe_unused]] int argc, [[maybe_unused]] const char** argv)
636695
637696 // Close the file
638697 fclose (file);
698+ file = nullptr ;
639699
640700 // Set stream parameters
641701 stream_params.buf = buf;
642702 stream_params.buf_len = len;
643703
704+ grk_initialize (nullptr , 0 );
705+
644706 // Proceed with decompression
645707 codec = grk_decompress_init (&stream_params, ¶meters);
646708 if (!codec)
@@ -658,66 +720,11 @@ int main([[maybe_unused]] int argc, [[maybe_unused]] const char** argv)
658720 cleanup ();
659721 return -1 ;
660722 }
723+ cleanup ();
724+ goto beach;
661725 }
662726#endif
663727
664- // initialize decompress parameters
665- grk_decompress_parameters decompressParams = {};
666- decompressParams.core .skip_allocate_composite = !doStore;
667- // differential: disable as it breaks differential decompression
668- if (!doDifferential)
669- {
670- decompressParams.asynchronous = true ;
671- decompressParams.simulate_synchronous = true ;
672- }
673-
674- bool fromBuffer = fileOpt->count () == 0 ;
675- if (dWindowOpt->count () > 0 )
676- {
677- decompressParams.dw_x0 = dwindow[0 ];
678- decompressParams.dw_y0 = dwindow[1 ];
679- decompressParams.dw_x1 = dwindow[2 ];
680- decompressParams.dw_y1 = dwindow[3 ];
681- printf (" Window set to %f,%f,%f,%f\n " , dwindow[0 ], dwindow[1 ], dwindow[2 ], dwindow[3 ]);
682- }
683-
684- grk_image* image = nullptr ;
685- const char * inputFileStr = nullptr ;
686- bool useCallbacks = false ;
687- if (useCallbacks && !fromBuffer && isNetwork (inputFilePath))
688- {
689- printf (" [WARNING] Disabling callbacks for network file %s\n " , inputFilePath.c_str ());
690- useCallbacks = false ;
691- }
692-
693- bool differentialByLayer = true ;
694- if (layersOpt->count () > 0 && maxLayers == 0 )
695- differentialByLayer = false ;
696- bool differentialByResolution = true ;
697- if (resOpt->count () > 0 && maxResolutions == 0 )
698- differentialByResolution = false ;
699-
700- // if we store, then no need to cache images, otherwise we choose minimum caching - image
701- uint32_t fullCacheStrategy = doStore ? GRK_TILE_CACHE_NONE : GRK_TILE_CACHE_IMAGE;
702-
703- // if true, decompress a particular tile, otherwise decompress
704- // all tiles
705- bool decompressTile = tileOpt->count () > 0 ;
706-
707- grk_object* codec_diff = nullptr ;
708- grk_object* codec_full = nullptr ;
709- grk_header_info headerInfo = {};
710- std::pair<grk_object*, bool > drc;
711-
712- // create j2k file stream
713- inputFileStr = inputFilePath.c_str ();
714- if (fromBuffer)
715- printf (" Decompressing buffer\n " );
716- else
717- printf (" Decompressing file %s\n " , inputFilePath.c_str ());
718-
719- grk_stream_params streamParams = {};
720- ReadStreamInfoExample sinfo (&streamParams);
721728 if (useCallbacks)
722729 {
723730 streamParams.seek_fn = stream_seek_fn;
0 commit comments