[poppler] 2 commits - utils/HtmlOutputDev.cc utils/HtmlOutputDev.h utils/pdftohtml.cc

Albert Astals Cid aacid at kemper.freedesktop.org
Wed Feb 8 15:00:49 PST 2012


 utils/HtmlOutputDev.cc |   47 ++++++++++++++++++++++++-----------------------
 utils/HtmlOutputDev.h  |    7 ++++---
 utils/pdftohtml.cc     |    3 +--
 3 files changed, 29 insertions(+), 28 deletions(-)

New commits:
commit f655efe327ddd3b6a68353a62589d4e4f8a318a8
Author: Albert Astals Cid <aacid at kde.org>
Date:   Wed Feb 8 23:58:27 2012 +0100

    Fix memory leak when using HtmlOutputDev::mapEncodingToHtml
    
    Bug #45805
    (cherry picked from commit 53a0c2043dfd56f6da7780f1a049f75af368b84b)

diff --git a/utils/HtmlOutputDev.cc b/utils/HtmlOutputDev.cc
index 50ceefe..c7435fc 100644
--- a/utils/HtmlOutputDev.cc
+++ b/utils/HtmlOutputDev.cc
@@ -17,7 +17,7 @@
 // All changes made under the Poppler project to this file are licensed
 // under GPL version 2 or later
 //
-// Copyright (C) 2005-2011 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2005-2012 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2008 Kjartan Maraas <kmaraas at gnome.org>
 // Copyright (C) 2008 Boris Toloknov <tlknv at yandex.ru>
 // Copyright (C) 2008 Haruyuki Kawabe <Haruyuki.Kawabe at unisys.co.jp>
@@ -766,7 +766,6 @@ void HtmlPage::dumpAsXML(FILE* f,int page){
 
 int HtmlPage::dumpComplexHeaders(FILE * const file, FILE *& pageFile, int page) {
   GooString* tmp;
-  char* htmlEncoding;
 
   if( !noframes )
   {
@@ -793,11 +792,12 @@ int HtmlPage::dumpComplexHeaders(FILE * const file, FILE *& pageFile, int page)
 
       delete tmp;
 
-      htmlEncoding = HtmlOutputDev::mapEncodingToHtml(globalParams->getTextEncodingName());
+      GooString *htmlEncoding = HtmlOutputDev::mapEncodingToHtml(globalParams->getTextEncodingName());
       if (!singleHtml)
-        fprintf(pageFile, "<META http-equiv=\"Content-Type\" content=\"text/html; charset=%s\"/>\n", htmlEncoding);
+        fprintf(pageFile, "<META http-equiv=\"Content-Type\" content=\"text/html; charset=%s\"/>\n", htmlEncoding->getCString());
       else
-        fprintf(pageFile, "<META http-equiv=\"Content-Type\" content=\"text/html; charset=%s\"/>\n <br/>\n", htmlEncoding);
+        fprintf(pageFile, "<META http-equiv=\"Content-Type\" content=\"text/html; charset=%s\"/>\n <br/>\n", htmlEncoding->getCString());
+      delete htmlEncoding;
   }
   else 
   {
@@ -983,23 +983,23 @@ static char* HtmlEncodings[][2] = {
     {NULL, NULL}
 };
 
-
-char* HtmlOutputDev::mapEncodingToHtml(GooString* encoding)
+GooString* HtmlOutputDev::mapEncodingToHtml(GooString* encoding)
 {
-    char* enc = encoding->getCString();
-    for(int i = 0; HtmlEncodings[i][0] != NULL; i++)
+  GooString* enc = encoding;
+  for(int i = 0; HtmlEncodings[i][0] != NULL; i++)
+  {
+    if( enc->cmp(HtmlEncodings[i][0]) == 0 )
     {
-	if( strcmp(enc, HtmlEncodings[i][0]) == 0 )
-	{
-	    return HtmlEncodings[i][1];
-	}
+      delete enc;
+      return new GooString(HtmlEncodings[i][1]);
     }
-    return enc; 
+  }
+  return enc; 
 }
 
 void HtmlOutputDev::doFrame(int firstPage){
   GooString* fName=new GooString(Docname);
-  char* htmlEncoding;
+  GooString* htmlEncoding;
   fName->append(".html");
 
   if (!(fContentsFrame = fopen(fName->getCString(), "w"))){
@@ -1016,7 +1016,7 @@ void HtmlOutputDev::doFrame(int firstPage){
   fputs("\n<HEAD>",fContentsFrame);
   fprintf(fContentsFrame,"\n<TITLE>%s</TITLE>",docTitle->getCString());
   htmlEncoding = mapEncodingToHtml(globalParams->getTextEncodingName());
-  fprintf(fContentsFrame, "\n<META http-equiv=\"Content-Type\" content=\"text/html; charset=%s\"/>\n", htmlEncoding);
+  fprintf(fContentsFrame, "\n<META http-equiv=\"Content-Type\" content=\"text/html; charset=%s\"/>\n", htmlEncoding->getCString());
   dumpMetaVars(fContentsFrame);
   fprintf(fContentsFrame, "</HEAD>\n");
   fputs("<FRAMESET cols=\"100,*\">\n",fContentsFrame);
@@ -1030,6 +1030,7 @@ void HtmlOutputDev::doFrame(int firstPage){
   fputs(">\n</FRAMESET>\n</HTML>\n",fContentsFrame);
  
   delete fName;
+  delete htmlEncoding;
   fclose(fContentsFrame);  
 }
 
@@ -1038,8 +1039,6 @@ HtmlOutputDev::HtmlOutputDev(char *fileName, char *title,
 	char *extension,
 	GBool rawOrder, int firstPage, GBool outline) 
 {
-  char *htmlEncoding;
-  
   fContentsFrame = NULL;
   docTitle = new GooString(title);
   pages = NULL;
@@ -1126,10 +1125,10 @@ HtmlOutputDev::HtmlOutputDev(char *fileName, char *title,
       delete right;
     }
 
-    htmlEncoding = mapEncodingToHtml(globalParams->getTextEncodingName()); 
+    GooString *htmlEncoding = mapEncodingToHtml(globalParams->getTextEncodingName()); 
     if (xml) 
     {
-      fprintf(page, "<?xml version=\"1.0\" encoding=\"%s\"?>\n", htmlEncoding);
+      fprintf(page, "<?xml version=\"1.0\" encoding=\"%s\"?>\n", htmlEncoding->getCString());
       fputs("<!DOCTYPE pdf2xml SYSTEM \"pdf2xml.dtd\">\n\n", page);
       fputs("<pdf2xml>\n",page);
     } 
@@ -1137,12 +1136,13 @@ HtmlOutputDev::HtmlOutputDev(char *fileName, char *title,
     {
       fprintf(page,"%s\n<HTML xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"\" xml:lang=\"\">\n<HEAD>\n<TITLE>%s</TITLE>\n", DOCTYPE, docTitle->getCString());
       
-      fprintf(page, "<META http-equiv=\"Content-Type\" content=\"text/html; charset=%s\"/>\n", htmlEncoding);
+      fprintf(page, "<META http-equiv=\"Content-Type\" content=\"text/html; charset=%s\"/>\n", htmlEncoding->getCString());
       
       dumpMetaVars(page);
       fprintf(page,"</HEAD>\n");
       fprintf(page,"<BODY bgcolor=\"#A0A0A0\" vlink=\"blue\" link=\"blue\">\n");
     }
+    delete htmlEncoding;
   }
   ok = gTrue; 
 }
@@ -1626,7 +1626,7 @@ GBool HtmlOutputDev::dumpDocOutline(PDFDoc* doc)
 			delete str;
 			bClose = gTrue;
 
-			char *htmlEncoding =
+			GooString *htmlEncoding =
 				HtmlOutputDev::mapEncodingToHtml(globalParams->getTextEncodingName());
 
 			fprintf(output, "<HTML xmlns=\"http://www.w3.org/1999/xhtml\" " \
@@ -1635,7 +1635,8 @@ GBool HtmlOutputDev::dumpDocOutline(PDFDoc* doc)
                                 "<TITLE>Document Outline</TITLE>\n"     \
                                 "<META http-equiv=\"Content-Type\" content=\"text/html; " \
                                 "charset=%s\"/>\n"                      \
-                                "</HEAD>\n<BODY>\n", htmlEncoding);
+                                "</HEAD>\n<BODY>\n", htmlEncoding->getCString());
+			delete htmlEncoding;
 		}
 	}
  
diff --git a/utils/HtmlOutputDev.h b/utils/HtmlOutputDev.h
index acf3c1e..1e248e2 100644
--- a/utils/HtmlOutputDev.h
+++ b/utils/HtmlOutputDev.h
@@ -14,7 +14,7 @@
 // All changes made under the Poppler project to this file are licensed
 // under GPL version 2 or later
 //
-// Copyright (C) 2006, 2007, 2009 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2006, 2007, 2009, 2012 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2008, 2009 Warren Toomey <wkt at tuhs.org>
 // Copyright (C) 2009, 2011 Carlos Garcia Campos <carlosgc at gnome.org>
 // Copyright (C) 2009 Kovid Goyal <kovid at kovidgoyal.net>
@@ -304,8 +304,9 @@ public:
 
 private:
   // convert encoding into a HTML standard, or encoding->getCString if not
-  // recognized
-  static char* mapEncodingToHtml(GooString* encoding);
+  // recognized. Will delete encoding for you and return a new one
+  // that you have to delete
+  static GooString* mapEncodingToHtml(GooString* encoding);
   void doProcessLink(AnnotLink *link);
   GooString* getLinkDest(AnnotLink *link,Catalog *catalog);
   void dumpMetaVars(FILE *);
commit 68f02d19c571fce956c7f4af6ccd0ff9ba8b1b03
Author: Albert Astals Cid <aacid at kde.org>
Date:   Wed Feb 8 23:47:46 2012 +0100

    Fix leak in pdftohtml getInfoString
    
    Bug #45805
    (cherry picked from commit 4afe4d827a342a847e8b89aba5b4164ed3b4cc32)

diff --git a/utils/pdftohtml.cc b/utils/pdftohtml.cc
index 0bc1ca7..fea91a4 100644
--- a/utils/pdftohtml.cc
+++ b/utils/pdftohtml.cc
@@ -13,7 +13,7 @@
 // All changes made under the Poppler project to this file are licensed
 // under GPL version 2 or later
 //
-// Copyright (C) 2007-2008, 2010 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2007-2008, 2010, 2012 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2010 Hib Eris <hib at hiberis.nl>
 // Copyright (C) 2010 Mike Slegeir <tehpola at yahoo.com>
 // Copyright (C) 2010 Suzuki Toshiya <mpsuzuki at hiroshima-u.ac.jp>
@@ -528,7 +528,6 @@ static GooString* getInfoString(Dict *infoDict, char *key) {
     rawString = obj.getString();
 
     // Convert rawString to unicode
-    encodedString = new GooString();
     if (rawString->hasUnicodeMarker()) {
       isUnicode = gTrue;
       unicodeLength = (obj.getString()->getLength() - 2) / 2;


More information about the poppler mailing list