[Libreoffice] [PATCH] Preserve RTF \'00 sequences (NUL) in strings

Troy Rollo libreoffice at troy.rollo.name
Sun Jul 17 07:32:28 PDT 2011


---
 svtools/source/svrtf/parrtf.cxx |   22 +++++++++++++++++++++-
 1 files changed, 21 insertions(+), 1 deletions(-)

diff --git a/svtools/source/svrtf/parrtf.cxx b/svtools/source/svrtf/parrtf.cxx
index 0b722d8..0c60834 100644
--- a/svtools/source/svrtf/parrtf.cxx
+++ b/svtools/source/svrtf/parrtf.cxx
@@ -341,7 +341,27 @@ void SvRTFParser::ScanText( const sal_Unicode cBreak )
                         ByteString aByteString;
                         while (1)
                         {
-                            aByteString.Append((char)GetHexValue());
+                            char c = (char)GetHexValue();
+
+                            if (c)
+                            {
+                                aByteString.Append(c);
+                            }
+                            else
+                            {
+                                /* \'00 is a valid internal character in  a
+                                * string in RTF, however ByteString::Append
+                                * does nothing if '\0' is passed in. It is
+                                * otherwise capable of handling strings with
+                                * embedded NULs, so add a '\1' and then
+                                * change it, as ByteString::SetChar does not
+                                * care if the character is '\0'.
+                                */
+                                int nLen = aByteString.Len();
+
+                                aByteString.Append('\001');
+                                aByteString.SetChar(nLen, '\0');
+                            }
 
                             bool bBreak = false;
                             sal_Char nSlash = '\\';
-- 
1.7.2.5



More information about the LibreOffice mailing list