From 2256593e92fa68236a3e5adafa321787e9ddfd12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Van=20Canneyt?= Date: Sun, 16 Mar 2025 19:14:55 +0100 Subject: [PATCH] * IN case of IO error, MD5File will return an empty digest. Fixes issue #41194 --- packages/hash/src/md5.pp | 49 ++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/packages/hash/src/md5.pp b/packages/hash/src/md5.pp index 8623b6ccae..15d3e41665 100644 --- a/packages/hash/src/md5.pp +++ b/packages/hash/src/md5.pp @@ -630,17 +630,20 @@ begin Reset(F, 1); {$pop} - if IOResult = 0 then - begin - GetMem(Buf, BufSize); - repeat - BlockRead(F, Buf^, Bufsize, Count); - if Count > 0 then - MDUpdate(Context, Buf^, Count); - until Count < BufSize; - FreeMem(Buf, BufSize); - Close(F); - end; + if IOResult <> 0 then + begin + Result:=Default(TMDDigest); + Exit; + end; + + GetMem(Buf, BufSize); + repeat + BlockRead(F, Buf^, Bufsize, Count); + if Count > 0 then + MDUpdate(Context, Buf^, Count); + until Count < BufSize; + FreeMem(Buf, BufSize); + Close(F); MDFinal(Context, Result); FileMode := ofm; @@ -663,17 +666,19 @@ begin Reset(F, 1); {$pop} - if IOResult = 0 then - begin - GetMem(Buf, BufSize); - repeat - BlockRead(F, Buf^, Bufsize, Count); - if Count > 0 then - MDUpdate(Context, Buf^, Count); - until Count < BufSize; - FreeMem(Buf, BufSize); - Close(F); - end; + if IOResult <> 0 then + begin + Result:=Default(TMDDigest); + Exit; + end; + GetMem(Buf, BufSize); + repeat + BlockRead(F, Buf^, Bufsize, Count); + if Count > 0 then + MDUpdate(Context, Buf^, Count); + until Count < BufSize; + FreeMem(Buf, BufSize); + Close(F); MDFinal(Context, Result); FileMode := ofm;