qt4/src/poppler-private.cc |   51 ++++++++++++++++++++++++++++++++++++++-------
 qt4/src/poppler-private.h  |   34 ++----------------------------
 2 files changed, 47 insertions(+), 38 deletions(-)

New commits:
commit 96e169b0eca31891f3cd564365d4a2a5c6e2a2c0
Author: Albert Astals Cid <[email protected]>
Date:   Tue Feb 8 19:58:31 2011 +0000

    Make really sure the uMap static pointer is valid
    
    It might happen you are extremely unlucky and get the same globalParams 
after a new delete/creation

diff --git a/qt4/src/poppler-private.cc b/qt4/src/poppler-private.cc
index 253222e..d6e3265 100644
--- a/qt4/src/poppler-private.cc
+++ b/qt4/src/poppler-private.cc
@@ -45,6 +45,8 @@ namespace Debug {
 
 }
 
+    static UnicodeMap *utf8Map = 0;
+
     void setDebugErrorFunction(PopplerDebugFunc function, const QVariant 
&closure)
     {
         Debug::debugFunction = function ? function : 
Debug::qDebugDebugFunction;
@@ -70,14 +72,11 @@ namespace Debug {
     }
 
     QString unicodeToQString(Unicode* u, int len) {
-        static UnicodeMap *uMap = 0;
-        static GlobalParams *gParams = globalParams;
-        if (!uMap || gParams != globalParams)
+        if (!utf8Map)
         {
                 GooString enc("UTF-8");
-                uMap = globalParams->getUnicodeMap(&enc);
-                uMap->incRefCnt();
-                gParams = globalParams;
+                utf8Map = globalParams->getUnicodeMap(&enc);
+                utf8Map->incRefCnt();
         }
 
         // ignore the last character if it is 0x0
@@ -90,7 +89,7 @@ namespace Debug {
         for (int i = 0; i < len; ++i)
         {
             char buf[8];
-            const int n = uMap->mapUnicode(u[i], buf, sizeof(buf));
+            const int n = utf8Map->mapUnicode(u[i], buf, sizeof(buf));
             convertedStr.append(buf, n);
         }
 
@@ -223,6 +222,44 @@ namespace Debug {
             default: ;
         }
     }
+    
+    DocumentData::~DocumentData()
+    {
+        qDeleteAll(m_embeddedFiles);
+        delete (OptContentModel *)m_optContentModel;
+        delete doc;
+        delete m_outputDev;
+        delete m_fontInfoIterator;
+    
+        count --;
+        if ( count == 0 )
+        {
+            utf8Map = 0;
+            delete globalParams;
+        }
+      }
+    
+    void DocumentData::init(GooString *ownerPassword, GooString *userPassword)
+    {
+        m_fontInfoIterator = 0;
+        m_backend = Document::SplashBackend;
+        m_outputDev = 0;
+        paperColor = Qt::white;
+        m_hints = 0;
+        m_optContentModel = 0;
+        // It might be more appropriate to delete these in PDFDoc
+        delete ownerPassword;
+        delete userPassword;
+      
+        if ( count == 0 )
+        {
+            utf8Map = 0;
+            globalParams = new GlobalParams();
+            setErrorFunction(qt4ErrorFunction);
+        }
+        count ++;
+    }
+
 
     void DocumentData::addTocChildren( QDomDocument * docSyn, QDomNode * 
parent, GooList * items )
     {
diff --git a/qt4/src/poppler-private.h b/qt4/src/poppler-private.h
index e3493fa..6800a8b 100644
--- a/qt4/src/poppler-private.h
+++ b/qt4/src/poppler-private.h
@@ -1,7 +1,7 @@
 /* poppler-private.h: qt interface to poppler
  * Copyright (C) 2005, Net Integration Technologies, Inc.
  * Copyright (C) 2005, 2008, Brad Hards <[email protected]>
- * Copyright (C) 2006-2009 by Albert Astals Cid <[email protected]>
+ * Copyright (C) 2006-2009, 2011 by Albert Astals Cid <[email protected]>
  * Copyright (C) 2007-2009 by Pino Toscano <[email protected]>
  * Copyright (C) 2011 Andreas Hartmetz <[email protected]>
  * Inspired on code by
@@ -90,37 +90,9 @@ namespace Poppler {
                init(ownerPassword, userPassword);
            }
        
-       void init(GooString *ownerPassword, GooString *userPassword)
-           {
-               m_fontInfoIterator = 0;
-               m_backend = Document::SplashBackend;
-               m_outputDev = 0;
-               paperColor = Qt::white;
-               m_hints = 0;
-               m_optContentModel = 0;
-               // It might be more appropriate to delete these in PDFDoc
-               delete ownerPassword;
-               delete userPassword;
-               
-               if ( count == 0 )
-               {
-                       globalParams = new GlobalParams();
-                       setErrorFunction(qt4ErrorFunction);
-               }
-               count ++;
-           }
+       void init(GooString *ownerPassword, GooString *userPassword);
        
-       ~DocumentData()
-       {
-               qDeleteAll(m_embeddedFiles);
-               delete (OptContentModel *)m_optContentModel;
-               delete doc;
-               delete m_outputDev;
-               delete m_fontInfoIterator;
-               
-               count --;
-               if ( count == 0 ) delete globalParams;
-       }
+       ~DocumentData();
        
        OutputDev *getOutputDev()
        {
_______________________________________________
poppler mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/poppler

Reply via email to