[prev in list] [next in list] [prev in thread] [next in thread] 

List:       freedesktop-poppler
Subject:    [poppler] poppler/XRef.cc
From:       GitLab Mirror <gitlab-mirror () kemper ! freedesktop ! org>
Date:       2022-04-01 23:31:04
Message-ID: 20220401233104.0BC43760BC () kemper ! freedesktop ! org
[Download RAW message or body]

 poppler/XRef.cc |   21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

New commits:
commit 5e57fc6025fdf9374cf77549265a2ccb9c91fbf8
Author: Albert Astals Cid <aacid@kde.org>
Date:   Sat Apr 2 01:27:36 2022 +0200

    More MSVC fixes
    
    All the casts are protected by ifs that check the cast is in range or
    fails otherwise

diff --git a/poppler/XRef.cc b/poppler/XRef.cc
index b3fdf9de..9de4edd4 100644
--- a/poppler/XRef.cc
+++ b/poppler/XRef.cc
@@ -832,17 +832,17 @@ bool XRef::readXRefStreamSection(Stream *xrefStr, const int *w, \
int first, int n  switch (type) {
             case 0:
                 entries[i].offset = offset;
-                entries[i].gen = gen;
+                entries[i].gen = static_cast<int>(gen);
                 entries[i].type = xrefEntryFree;
                 break;
             case 1:
                 entries[i].offset = offset;
-                entries[i].gen = gen;
+                entries[i].gen = static_cast<int>(gen);
                 entries[i].type = xrefEntryUncompressed;
                 break;
             case 2:
                 entries[i].offset = offset;
-                entries[i].gen = gen;
+                entries[i].gen = static_cast<int>(gen);
                 entries[i].type = xrefEntryCompressed;
                 break;
             default:
@@ -869,7 +869,7 @@ bool XRef::constructXRef(bool *wasReconstructed, bool \
needCatalogDict)  bool gotRoot;
     char *token = nullptr;
     bool oneCycle = true;
-    int offset = 0;
+    Goffset offset = 0;
 
     resize(0); // free entries properly
     gfree(entries);
@@ -1076,7 +1076,12 @@ bool XRef::isRefEncrypted(Ref r)
     }
 
     case xrefEntryCompressed: {
-        const Object objStr = fetch(e->offset, 0);
+        const Goffset objStrNum = e->offset;
+        if (unlikely(objStrNum < 0 || objStrNum >= size)) {
+            error(errSyntaxError, -1, "XRef::isRefEncrypted - Compressed object \
offset out of xref bounds"); +            return false;
+        }
+        const Object objStr = fetch(static_cast<int>(e->offset), 0);
         return objStr.getStream()->isEncrypted();
     }
 
@@ -1225,7 +1230,7 @@ Object XRef::fetch(int num, int gen, int recursion, Goffset \
*endPos)  
         ObjectStream *objStr = objStrs.lookup(e->offset);
         if (!objStr) {
-            objStr = new ObjectStream(this, e->offset, recursion + 1);
+            objStr = new ObjectStream(this, static_cast<int>(e->offset), recursion + \
1);  if (!objStr->isOk()) {
                 delete objStr;
                 objStr = nullptr;
@@ -1815,11 +1820,11 @@ void XRef::scanSpecialFlags()
     // individually in full rewrite mode.
     for (int i = 0; i < size; ++i) {
         if (entries[i].type == xrefEntryCompressed) {
-            const int objStmNum = entries[i].offset;
+            const Goffset objStmNum = entries[i].offset;
             if (unlikely(objStmNum < 0 || objStmNum >= size)) {
                 error(errSyntaxError, -1, "Compressed object offset out of xref \
bounds");  } else {
-                getEntry(objStmNum)->setFlag(XRefEntry::DontRewrite, true);
+                getEntry(static_cast<int>(objStmNum))->setFlag(XRefEntry::DontRewrite, \
true);  }
         }
     }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic