File r1588-Fix-various-issues-when-Kids-array-is-missing.patch of Package podofo.23799

------------------------------------------------------------------------
r1588 | aja_ | 2014-04-01 22:05:08 +0200 (mar, 01 abr 2014) | 2 lines

ADDED: Patch by Mark Rogers: Fix various issues when "Kids" array is missing


Index: src/doc/PdfPage.cpp
===================================================================
--- src/doc/PdfPage.cpp	(revision 1587)
+++ src/doc/PdfPage.cpp	(revision 1588)
@@ -513,22 +513,28 @@
 
     while( pParent ) 
     {
-        const PdfArray& kids        = pParent->GetIndirectKey( "Kids" )->GetArray();
-        PdfArray::const_iterator it = kids.begin();
-
-        while( it != kids.end() && (*it).GetReference() != ref )
+        PdfObject* pKids = pParent->GetIndirectKey( "Kids" );
+        if ( pKids != NULL )
         {
-            PdfObject* pNode = this->GetObject()->GetOwner()->GetObject( (*it).GetReference() );
+            const PdfArray& kids        = pKids->GetArray();
+            PdfArray::const_iterator it = kids.begin();
 
-            if( pNode->GetDictionary().GetKey( PdfName::KeyType )->GetName() == PdfName( "Pages" ) )
-                nPageNumber += static_cast<int>(pNode->GetDictionary().GetKey( "Count" )->GetNumber());
-            else 
-                // if we do not have a page tree node, 
-                // we most likely have a page object:
-                // so the page count is 1
-                ++nPageNumber;
+            while( it != kids.end() && (*it).GetReference() != ref )
+            {
+                PdfObject* pNode = this->GetObject()->GetOwner()->GetObject( (*it).GetReference() );
 
-            ++it;
+                if( pNode->GetDictionary().GetKey( PdfName::KeyType ) != NULL 
+                    && pNode->GetDictionary().GetKey( PdfName::KeyType )->GetName() == PdfName( "Pages" ) )
+                {
+                    nPageNumber += static_cast<int>(pNode->GetDictionary().GetKey( "Count" )->GetNumber());
+                } else {
+                    // if we do not have a page tree node, 
+                    // we most likely have a page object:
+                    // so the page count is 1
+                    ++nPageNumber;
+                }
+                ++it;
+            }
         }
 
         ref     = pParent->Reference();
Index: src/doc/PdfPagesTree.cpp
===================================================================
--- src/doc/PdfPagesTree.cpp	(revision 1587)
+++ src/doc/PdfPagesTree.cpp	(revision 1588)
@@ -303,7 +303,7 @@
 
     
     const PdfObject* pObj = pParent->GetIndirectKey( "Kids" );
-    if( !pObj->IsArray() )
+    if( pObj == NULL || !pObj->IsArray() )
     {
         PODOFO_RAISE_ERROR( ePdfError_InvalidDataType );
     }

------------------------------------------------------------------------
openSUSE Build Service is sponsored by