src/lib/MSPUBParser.cpp |    3 +++
 1 file changed, 3 insertions(+)

New commits:
commit 9960782d8f973afe29ae2bd11e490d9c13c773b3
Author:     Caolán McNamara <[email protected]>
AuthorDate: Fri May 22 14:07:54 2026 +0000
Commit:     Caolán McNamara <[email protected]>
CommitDate: Fri May 22 16:16:03 2026 +0200

    clamp gradient numEntries by blob size in getNewFill
    
    Clamp numEntries by (size - 6) / 8 first, matching the per-iteration
    bounds checks in parseVertices and parseSegments.
    
    Change-Id: I71c287e3672e5008077c28287badfc3da23a956f
    Reviewed-on: https://gerrit.libreoffice.org/c/libmspub/+/205558
    Tested-by: Caolán McNamara <[email protected]>
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp
index c8cc666..214d54c 100644
--- a/src/lib/MSPUBParser.cpp
+++ b/src/lib/MSPUBParser.cpp
@@ -2079,6 +2079,9 @@ std::shared_ptr<Fill> MSPUBParser::getNewFill(const 
std::map<unsigned short, uns
       {
         unsigned short numEntries = gradientData[0] | (gradientData[1] << 8);
         unsigned offs = 6;
+        const unsigned maxEntries = (gradientData.size() - offs) / 8;
+        if (numEntries > maxEntries)
+          numEntries = maxEntries;
         for (unsigned i = 0; i < numEntries; ++i)
         {
           unsigned color = gradientData[offs] | (unsigned(gradientData[offs + 
1]) << 8) | (unsigned(gradientData[offs + 2]) << 16) | 
(unsigned(gradientData[offs + 3]) << 24);

Reply via email to