[Libreoffice-commits] core.git: writerfilter/source

Caolán McNamara caolanm at redhat.com
Thu Nov 7 09:49:15 CET 2013


 writerfilter/source/rtftok/rtfdocumentimpl.cxx |   10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

New commits:
commit cc79b16a75efcb62cd2fe2f1ee26f6650ab082ee
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Nov 7 08:48:22 2013 +0000

    ensure string accesses are in bounds
    
    as demonstrated by ooo39541-3.rtf
    
    Change-Id: I995f0250e98a68b1b56da877314c9fd24cf46221

diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index f6f3b36b..f00ee13 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -4041,16 +4041,20 @@ int RTFDocumentImpl::popState()
                     }
                 }
                 aStr = aBuf.makeStringAndClear();
+
                 // ignore the first bytes
                 if (aStr.getLength() > 8)
                     aStr = aStr.copy(8);
                 // extract name
-                int nLength = aStr.toChar();
+                sal_Int32 nLength = aStr.toChar();
                 if (!aStr.isEmpty())
                     aStr = aStr.copy(1);
+                nLength = std::min(nLength, aStr.getLength());
                 OString aName = aStr.copy(0, nLength);
-                if (!aStr.isEmpty())
+                if (aStr.getLength() > nLength)
                     aStr = aStr.copy(nLength+1); // zero-terminated string
+                else
+                    aStr = OString();
                 // extract default text
                 nLength = aStr.toChar();
                 if (!aStr.isEmpty())
@@ -4059,7 +4063,7 @@ int RTFDocumentImpl::popState()
                 m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFData_name, pNValue);
                 if (nLength > 0)
                 {
-                    OString aDefaultText = aStr.copy(0, nLength);
+                    OString aDefaultText = aStr.copy(0, std::min(nLength, aStr.getLength()));
                     RTFValue::Pointer_t pDValue(new RTFValue(OStringToOUString(aDefaultText, aState.nCurrentEncoding)));
                     m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFTextInput_default, pDValue);
                 }


More information about the Libreoffice-commits mailing list