src/lib/CDRParser.cpp |    4 ++++
 1 file changed, 4 insertions(+)

New commits:
commit 9f3400fbd8a7e8fa3dedbee9edb8ecffff5bd573
Author:     Caolán McNamara <[email protected]>
AuthorDate: Fri May 22 20:56:20 2026 +0000
Commit:     Caolán McNamara <[email protected]>
CommitDate: Sat May 23 17:48:50 2026 +0200

    clamp numChars against remaining input in readTxsm6 and readTxsm16
    
    Change-Id: If34eeced6956c3783daf4b935163008d03d2cb26
    Reviewed-on: https://gerrit.libreoffice.org/c/libcdr/+/205587
    Tested-by: Caolán McNamara <[email protected]>
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp
index c58251e..3db6f62 100644
--- a/src/lib/CDRParser.cpp
+++ b/src/lib/CDRParser.cpp
@@ -2775,6 +2775,8 @@ void 
libcdr::CDRParser::readTxsm16(librevenge::RVNGInputStream *input)
       }
 
       unsigned numChars = readU32(input);
+      if (numChars > getRemainingLength(input) / 8)
+        numChars = getRemainingLength(input) / 8;
       std::vector<unsigned char> charDescriptions(numChars);
       for (i=0; i<numChars; ++i)
       {
@@ -2882,6 +2884,8 @@ void 
libcdr::CDRParser::readTxsm6(librevenge::RVNGInputStream *input)
     }
     unsigned numChars = readU32(input);
     input->seek(4, librevenge::RVNG_SEEK_CUR);
+    if (numChars > getRemainingLength(input) / 12)
+      numChars = getRemainingLength(input) / 12;
     std::vector<unsigned char> textData;
     std::vector<unsigned char> charDescriptions;
     textData.reserve(numChars);

Reply via email to