diff options
-rw-r--r-- | lib/util.lua | 50 | ||||
-rwxr-xr-x | tests.lua | 11 |
2 files changed, 53 insertions, 8 deletions
diff --git a/lib/util.lua b/lib/util.lua index a1de817..2ea4708 100644 --- a/lib/util.lua +++ b/lib/util.lua @@ -72,11 +72,61 @@ local error = function (str) end end +local opensubtitles_hash = function (fileName) + local fil = io.open(fileName, "rb") + if not fil then + return nil + end + + local lo,hi = 0,0 + for i = 1,8192 do + local a,b,c,d = fil:read(4):byte(1,4) + lo = lo + a + b*256 + c*65536 + d*16777216 + a,b,c,d = fil:read(4):byte(1,4) + hi = hi + a + b*256 + c*65536 + d*16777216 + while lo >= 4294967296 do + lo = lo - 4294967296 + hi = hi + 1 + end + while hi >= 4294967296 do + hi = hi - 4294967296 + end + end + + local size = fil:seek("end", -65536) + 65536 + for i = 1,8192 do + local a,b,c,d = fil:read(4):byte(1,4) + lo = lo + a + b*256 + c*65536 + d*16777216 + a,b,c,d = fil:read(4):byte(1,4) + hi = hi + a + b*256 + c*65536 + d*16777216 + while lo >= 4294967296 do + lo = lo - 4294967296 + hi = hi + 1 + end + while hi >= 4294967296 do + hi = hi - 4294967296 + end + end + + lo = lo + size + while lo >= 4294967296 do + lo = lo - 4294967296 + hi = hi + 1 + end + while hi >= 4294967296 do + hi = hi - 4294967296 + end + + fil:close() + return string.format("%08x%08x", hi,lo), size +end + return { table_merge = table_merge, table_print = table_print, table_match_or_any = table_match_or_any, zip_ext_first = zip_ext_first, string_rm_vid_ext = string_rm_vid_ext, + opensubtitles_hash = opensubtitles_hash, error = error, } @@ -5,24 +5,19 @@ local util = require 'lib/util' local errs = 0 -local file_hash_verify = function (path, sha256) - local newhash = io.popen('sha256sum ' .. path):read(64) - return (newhash == sha256) -end - local test_subscene = function () - local out, sha256, name + local out, ohash, name out = os.tmpname() name = 'Fight Club (1999) (1080p BluRay x265 10bit Tigole) [QxR].mp4' - sha256 = 'fe88e2c1345a7daed82cb570952c13fae6a6867449f7dd5e719ea0a0c1e2e242' + ohash = 'ffec132e13e08f4c' if not subscene.search(name, out) then util.error('subscene: fetch failed') errs = errs + 1 end - if not file_hash_verify(out, sha256) then + if ohash ~= util.opensubtitles_hash(out) then util.error('subscene: hash mismatch') errs = errs + 1 end |