Update of /cvs/poppler/poppler/qt4/src
In directory kemper:/tmp/cvs-serv31463/qt4/src

Modified Files:
      Tag: POPPLER_0_5_X
        poppler-document.cc poppler-private.h 
Log Message:
2006-10-18  Albert Astals Cid <[EMAIL PROTECTED]>

        * qt4/src/poppler-document.cc:
        * qt4/src/poppler-private.h: Do no crash when opening a encrypted
        document. Do not crash when unlocking a locked document.



Index: poppler-document.cc
===================================================================
RCS file: /cvs/poppler/poppler/qt4/src/poppler-document.cc,v
retrieving revision 1.22
retrieving revision 1.22.2.1
diff -u -d -r1.22 -r1.22.2.1
--- poppler-document.cc 25 Jul 2006 18:39:57 -0000      1.22
+++ poppler-document.cc 18 Oct 2006 18:31:43 -0000      1.22.2.1
@@ -51,27 +51,21 @@
                                             new 
GooString(userPassword.data()));
        Document *pdoc;
        if (doc->doc.isOk() || doc->doc.getErrorCode() == errEncrypted) {
-           pdoc = new Document(doc);
-           if (doc->doc.getErrorCode() == errEncrypted)
-               pdoc->m_doc->locked = true;
-           else
-               pdoc->m_doc->locked = false;
-           pdoc->m_doc->m_fontInfoScanner = new FontInfoScanner(&(doc->doc));
-           int numEmb = doc->doc.getCatalog()->numEmbeddedFiles();
-           if (!(0 == numEmb)) {
-               // we have some embedded documents, build the list
-               for (int yalv = 0; yalv < numEmb; ++yalv) {
-                   EmbFile *ef = doc->doc.getCatalog()->embeddedFile(yalv);
-                   pdoc->m_doc->m_embeddedFiles.append(new EmbeddedFile(ef));
-                   delete ef;
+               pdoc = new Document(doc);
+               if (doc->doc.getErrorCode() == errEncrypted)
+                       pdoc->m_doc->locked = true;
+               else
+               {
+                       pdoc->m_doc->locked = false;
+                       pdoc->m_doc->fillMembers();
                }
-           }
-           return pdoc;
+               return pdoc;
        }
        else
-           delete doc;
-           return NULL;
-
+       {
+               delete doc;
+       }
+       return NULL;
     }
 
     Document::Document(DocumentData *dataA)
@@ -94,19 +88,16 @@
     {
        if (m_doc->locked) {
            /* racier then it needs to be */
-           GooString *ownerPwd = new GooString(ownerPassword.data());
-           GooString *userPwd = new GooString(userPassword.data());
-           DocumentData *doc2 = new DocumentData(m_doc->doc.getFileName(),
-                                                 ownerPwd,
-                                                 userPwd);
-           delete ownerPwd;
-           delete userPwd;
+           DocumentData *doc2 = new DocumentData(new 
GooString(m_doc->doc.getFileName()),
+                                                 new 
GooString(ownerPassword.data()),
+                                                 new 
GooString(userPassword.data()));
            if (!doc2->doc.isOk()) {
                delete doc2;
            } else {
                delete m_doc;
                m_doc = doc2;
                m_doc->locked = false;
+               m_doc->fillMembers();
            }
        }
        return m_doc->locked;

Index: poppler-private.h
===================================================================
RCS file: /cvs/poppler/poppler/qt4/src/poppler-private.h,v
retrieving revision 1.13
retrieving revision 1.13.2.1
diff -u -d -r1.13 -r1.13.2.1
--- poppler-private.h   24 Aug 2006 22:32:32 -0000      1.13
+++ poppler-private.h   18 Oct 2006 18:31:43 -0000      1.13.2.1
@@ -165,6 +165,20 @@
                        m_splashOutputDev = NULL;
                }
        }
+       
+       void fillMembers()
+       {
+               m_fontInfoScanner = new FontInfoScanner(&doc);
+               int numEmb = doc.getCatalog()->numEmbeddedFiles();
+               if (!(0 == numEmb)) {
+                       // we have some embedded documents, build the list
+                       for (int yalv = 0; yalv < numEmb; ++yalv) {
+                               EmbFile *ef = 
doc.getCatalog()->embeddedFile(yalv);
+                               m_embeddedFiles.append(new EmbeddedFile(ef));
+                               delete ef;
+                       }
+               }
+       }
 
        class PDFDoc doc;
        bool locked;

_______________________________________________
poppler mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/poppler

Reply via email to