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