BenBE's humble thoughts Thoughts the world doesn't need yet …

20.05.2010

SquirrelMail: MIME-Decoding ohne preg_replace /e

Filed under: Software — Schlagwörter: , , , , , — BenBE @ 17:13:56

Okay und mal wieder gibt’s hier einen Patch, um SquirrelMail von unnötigen Eval-Aufrufen zu bereinigen. Diesmal in dem Teil von SquirrelMail, der für das Dekodieren von MIME-kodierten Mails sorgt. Konkret geht es hierbei aber weniger um die MIME-Dekodierung selber als vielmehr um das Verarbeiten der Header-Daten.

Da ich aber zu SquirrelMail schon genug gesagt habe, lass ich es (ich bin es leid, mich diesbezüglich immer wieder Redundanz erzeugen zu müssen. Von daher: Hier ist der Patch:

--- mime.php        2010-05-20 16:42:58.000000000 +0200
+++ mime.php    2010-05-20 17:03:49.000000000 +0200
@@ -626,6 +626,16 @@
 }

 /**
+ * Helper function for Header field Decoding
+ *
+ * This function decodes quoted-printable-escaped character sequences into
+ * their original byte values, i.e. from =40 into @
+ */
+function decodeHeader_charDecode($m) {
+    return chr(hexdec($m[1]));
+}
+
+/**
  * Decodes headers
  *
  * This functions decode strings that is encoded according to
@@ -704,8 +714,7 @@
                     break;
                 case 'Q':
                     $replace = str_replace('_', ' ', $res[4]);
-                    $replace = preg_replace('/=([0-9a-f]{2})/ie', 'chr(hexdec("\1"))',
-                            $replace);
+                    $replace = preg_replace_callback('/=([0-9a-f]{2})/i', 'decodeHeader_charDecode', $replace);
                     if ($can_be_encoded) {
                         // string is converted from one charset to another. sanitizing depends on $htmlsave
                         $replace = charset_convert($res[2], $replace,$default_charset,$htmlsave);

Die Änderung sollte soweit klar sein. Falls noch was dazu kommt, ergänze ich das noch. Bei einem weiteren kurzen Blick durch diese Datei ist mir aber nichts aufgefallen.

Flattr this!

Keine Kommentare »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress