From 08904814507d13a634e008e1bb203633f049eee9 Mon Sep 17 00:00:00 2001 From: Jared Hancock <jared@osticket.com> Date: Mon, 17 Feb 2014 13:44:34 -0600 Subject: [PATCH] tnef: Improve performance of checksum checks Previously, the data blocks were inspected byte for byte. Now data blocks are parsed 1k at a time. Fewer PHP function calls ultimately means faster performance. --- include/tnef_decoder.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/include/tnef_decoder.php b/include/tnef_decoder.php index f0eba4e79..18e95d697 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'); } -- GitLab