diff --git a/include/tnef_decoder.php b/include/tnef_decoder.php index f0eba4e792914621fefbbbdf4f2f1cd5f9c94e76..18e95d697c5eba8bb218ff81d5e9c903b2cedbd7 100644 --- a/include/tnef_decoder.php +++ b/include/tnef_decoder.php @@ -110,10 +110,13 @@ class TnefStreamReader implements Iterator { } function check($block) { - $sum = 0; - for ($i=0, $k=strlen($block['data']); $i < $k; $i++) - $sum += ord($block['data'][$i]); - if ($block['checksum'] != ($sum % 65536)) + $sum = 0; $bytes = strlen($block['data']); $bs = 1024; + for ($i=0; $i < $bytes; $i+=$bs) { + $b = unpack('C*', substr($block['data'], $i, min($bs, $bytes-$i))); + $sum += array_sum($b); + $sum = $sum % 65536; + } + if ($block['checksum'] != $sum) throw new TnefException('Corrupted block. Invalid checksum'); }