From 7bba0032fe0318399e3522687a3b1ff3a4887486 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Mon, 18 Feb 2013 09:35:02 -0500
Subject: [PATCH] Fix NUL characters in content-type of ms-tnef attachment (#1488964)

---
 CHANGELOG                    |    1 +
 program/lib/tnef_decoder.php |   11 ++++++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index d7c211d..1ee72e9 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Fix NUL characters in content-type of ms-tnef attachment (#1488964)
 - Fix regression in handling LDAP contact identifiers (#1488959)
 - Updated translations from Transifex
 - Fix buggy error template in a frame (#1488938)
diff --git a/program/lib/tnef_decoder.php b/program/lib/tnef_decoder.php
index 28d3689..e6ccc23 100644
--- a/program/lib/tnef_decoder.php
+++ b/program/lib/tnef_decoder.php
@@ -243,16 +243,16 @@
             /* Store any interesting attributes. */
             switch ($attr_name) {
             case self::MAPI_ATTACH_LONG_FILENAME:
+                $value = str_replace("\0", '', $value);
                 /* Used in preference to AFILENAME value. */
                 $attachment_data[0]['name'] = preg_replace('/.*[\/](.*)$/', '\1', $value);
-                $attachment_data[0]['name'] = str_replace("\0", '', $attachment_data[0]['name']);
                 break;
 
             case self::MAPI_ATTACH_MIME_TAG:
+                $value = str_replace("\0", '', $value);
                 /* Is this ever set, and what is format? */
-                $attachment_data[0]['type'] = preg_replace('/^(.*)\/.*/', '\1', $value);
+                $attachment_data[0]['type']    = preg_replace('/^(.*)\/.*/', '\1', $value);
                 $attachment_data[0]['subtype'] = preg_replace('/.*\/(.*)$/', '\1', $value);
-                $attachment_data[0]['subtype'] = str_replace("\0", '', $attachment_data[0]['subtype']);
                 break;
             }
         }
@@ -295,9 +295,10 @@
             break;
 
         case self::AFILENAME:
+            $value = $this->_getx($data, $this->_geti($data, 32));
+            $value = str_replace("\0", '', $value);
             /* Strip path. */
-            $attachment_data[0]['name'] = preg_replace('/.*[\/](.*)$/', '\1', $this->_getx($data, $this->_geti($data, 32)));
-            $attachment_data[0]['name'] = str_replace("\0", '', $attachment_data[0]['name']);
+            $attachment_data[0]['name'] = preg_replace('/.*[\/](.*)$/', '\1', $value);
 
             /* Checksum */
             $this->_geti($data, 16);

--
Gitblit v1.9.1