@@ -807,7 +807,7 @@ private Mono<ResolveResult> downloadOrResolveFile(InstallContext context, CurseF
807807
808808 if (locatedFile != null ) {
809809 log .info ("Mod file {} already exists" , locatedFile );
810- return FileHashVerifier . verify ( locatedFile , cfFile . getHashes () )
810+ return verifyHash ( cfFile , locatedFile )
811811 .map (ResolveResult ::new );
812812 }
813813 else {
@@ -817,7 +817,7 @@ private Mono<ResolveResult> downloadOrResolveFile(InstallContext context, CurseF
817817 }
818818
819819 return context .cfApi .download (cfFile , outputFile , modFileDownloadStatusHandler (this .outputDir , log ))
820- .flatMap (path -> FileHashVerifier . verify ( path , cfFile . getHashes () ))
820+ .flatMap (path -> verifyHash ( cfFile , path ))
821821 .map (ResolveResult ::new )
822822 .onErrorResume (
823823 e -> e instanceof FailedRequestException
@@ -827,6 +827,16 @@ private Mono<ResolveResult> downloadOrResolveFile(InstallContext context, CurseF
827827 }
828828 }
829829
830+ private static Mono <Path > verifyHash (CurseForgeFile cfFile , Path path ) {
831+ return FileHashVerifier .verify (path , cfFile .getHashes ())
832+ .onErrorResume (IllegalArgumentException .class ::isInstance ,
833+ e -> {
834+ log .warn ("Unable to process hash for mod {}: {}" , cfFile , e .getMessage ());
835+ return Mono .just (path );
836+ }
837+ );
838+ }
839+
830840 private Mono <ResolveResult > handleFileNeedingManualDownload (CurseForgeMod modInfo , boolean isWorld , CurseForgeFile cfFile ,
831841 Path outputFile
832842 ) {
0 commit comments