sw/source/filter/ww8/ww8scan.cxx |   15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

New commits:
commit af2d477a30c197be5fbfa54022343f7a559b35cf
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Fri Jul 9 14:51:23 2021 +0100
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Fri Jul 9 21:43:34 2021 +0200

    ofz: OOM
    
    these old ww7- font names are supposed to be limited to maxStrSize
    
    Change-Id: Ide316a09d97d535b6cbc2911466df12f37e703cf
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118689
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/sw/source/filter/ww8/ww8scan.cxx b/sw/source/filter/ww8/ww8scan.cxx
index 657cf60026c9..b8ea323e434d 100644
--- a/sw/source/filter/ww8/ww8scan.cxx
+++ b/sw/source/filter/ww8/ww8scan.cxx
@@ -7206,16 +7206,17 @@ namespace
         return true;
     }
 
-    sal_Int32 getStringLength(
-        sal_uInt8 const * p, std::size_t offset, sal_uInt8 const * pEnd)
+    sal_Int32 getStringLengthWithMax(
+        sal_uInt8 const * p, std::size_t offset, sal_uInt8 const * pEnd, 
std::size_t maxchars)
     {
         assert(p <= pEnd);
         assert(pEnd - p <= SAL_MAX_INT32);
         if (offset >= o3tl::make_unsigned(pEnd - p)) {
             return -1;
         }
-        void const * p2 = std::memchr(
-            p + offset, 0, static_cast<std::size_t>(pEnd - p) - offset);
+        std::size_t nbytes = static_cast<std::size_t>(pEnd - p) - offset;
+        std::size_t nsearch = std::min(nbytes, maxchars + 1);
+        void const * p2 = std::memchr(p + offset, 0, nsearch);
         if (p2 == nullptr) {
             return -1;
         }
@@ -7315,7 +7316,7 @@ WW8Fonts::WW8Fonts( SvStream& rSt, WW8Fib const & rFib )
                     eEnc = RTL_TEXTENCODING_MS_1252;
 
                 const size_t nStringOffset = 1 + 2;
-                sal_Int32 n = getStringLength(pVer2, nStringOffset, pEnd);
+                sal_Int32 n = getStringLengthWithMax(pVer2, nStringOffset, 
pEnd, maxStrSize);
                 if (n == -1) {
                     break;
                 }
@@ -7367,7 +7368,7 @@ WW8Fonts::WW8Fonts( SvStream& rSt, WW8Fib const & rFib )
                 if ((eEnc == RTL_TEXTENCODING_SYMBOL) || (eEnc == 
RTL_TEXTENCODING_DONTKNOW))
                     eEnc = RTL_TEXTENCODING_MS_1252;
                 const size_t nStringOffset = offsetof(WW8_FFN_Ver6, szFfn);
-                sal_Int32 n = getStringLength(pVer6, nStringOffset, pEnd);
+                sal_Int32 n = getStringLengthWithMax(pVer6, nStringOffset, 
pEnd, maxStrSize);
                 if (n == -1) {
                     break;
                 }
@@ -7375,7 +7376,7 @@ WW8Fonts::WW8Fonts( SvStream& rSt, WW8Fib const & rFib )
                 if (p->aFFNBase.ibszAlt && p->aFFNBase.ibszAlt < maxStrSize) 
//don't start after end of string
                 {
                     const size_t nAltStringOffset = offsetof(WW8_FFN_Ver6, 
szFfn) + p->aFFNBase.ibszAlt;
-                    n = getStringLength(pVer6, nAltStringOffset, pEnd);
+                    n = getStringLengthWithMax(pVer6, nAltStringOffset, pEnd, 
maxStrSize);
                     if (n == -1) {
                         break;
                     }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to