[poppler] fofi/FoFiType1.cc poppler/CharCodeToUnicode.cc poppler/GlobalParams.cc poppler/PDFDoc.cc poppler/UnicodeMap.cc

Albert Astals Cid aacid at kemper.freedesktop.org
Sat May 1 11:51:51 PDT 2010


 fofi/FoFiType1.cc            |    8 +++++---
 poppler/CharCodeToUnicode.cc |    6 ++++--
 poppler/GlobalParams.cc      |    6 ++++--
 poppler/PDFDoc.cc            |    4 +++-
 poppler/UnicodeMap.cc        |   21 ++++++++++++++++++---
 5 files changed, 34 insertions(+), 11 deletions(-)

New commits:
commit 9ce71fb35fdd66c55872956432160a5c76a62080
Author: Jakub Wilk <ubanus at users.sf.net>
Date:   Sat May 1 19:50:54 2010 +0100

    Use strtok_r instead strtok
    
    strtok is not thread safe

diff --git a/fofi/FoFiType1.cc b/fofi/FoFiType1.cc
index 5bfeaed..25bdc0e 100644
--- a/fofi/FoFiType1.cc
+++ b/fofi/FoFiType1.cc
@@ -15,6 +15,7 @@
 //
 // Copyright (C) 2005, 2008 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2005 Kristian Høgsberg <krh at redhat.com>
+// Copyright (C) 2010 Jakub Wilk <ubanus at users.sf.net>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -192,6 +193,7 @@ void FoFiType1::parse() {
   char buf[256];
   char c;
   int n, code, i, j;
+  char *tokptr;
 
   for (i = 1, line = (char *)file;
        i <= 100 && line && (!name || !encoding);
@@ -202,7 +204,7 @@ void FoFiType1::parse() {
       strncpy(buf, line, 255);
       buf[255] = '\0';
       if ((p = strchr(buf+9, '/')) &&
-	  (p = strtok(p+1, " \t\n\r"))) {
+	  (p = strtok_r(p+1, " \t\n\r", &tokptr))) {
 	name = copyString(p);
       }
       line = getNextLine(line);
@@ -270,8 +272,8 @@ void FoFiType1::parse() {
 	    }
 	  }
 	} else {
-	  if (strtok(buf, " \t") &&
-	      (p = strtok(NULL, " \t\n\r")) && !strcmp(p, "def")) {
+	  if (strtok_r(buf, " \t", &tokptr) &&
+	      (p = strtok_r(NULL, " \t\n\r", &tokptr)) && !strcmp(p, "def")) {
 	    break;
 	  }
 	}
diff --git a/poppler/CharCodeToUnicode.cc b/poppler/CharCodeToUnicode.cc
index 80fd4c5..1835ddd 100644
--- a/poppler/CharCodeToUnicode.cc
+++ b/poppler/CharCodeToUnicode.cc
@@ -19,6 +19,7 @@
 // Copyright (C) 2008 Michael Vrable <mvrable at cs.ucsd.edu>
 // Copyright (C) 2008 Vasile Gaburici <gaburici at cs.umd.edu>
 // Copyright (C) 2010 William Bader <williambader at hotmail.com>
+// Copyright (C) 2010 Jakub Wilk <ubanus at users.sf.net>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -125,6 +126,7 @@ CharCodeToUnicode *CharCodeToUnicode::parseUnicodeToUnicode(
   Unicode *uBuf = (Unicode *)gmallocn(uBufSize, sizeof(Unicode));
   CharCodeToUnicode *ctu;
   int line, n, i;
+  char *tokptr;
 
   if (!(f = fopen(fileName->getCString(), "r"))) {
     gfree(uBuf);
@@ -143,14 +145,14 @@ CharCodeToUnicode *CharCodeToUnicode::parseUnicodeToUnicode(
   line = 0;
   while (getLine(buf, sizeof(buf), f)) {
     ++line;
-    if (!(tok = strtok(buf, " \t\r\n")) ||
+    if (!(tok = strtok_r(buf, " \t\r\n", &tokptr)) ||
 	sscanf(tok, "%x", &u0) != 1) {
       error(-1, "Bad line (%d) in unicodeToUnicode file '%s'",
 	    line, fileName->getCString());
       continue;
     }
     n = 0;
-    while ((tok = strtok(NULL, " \t\r\n"))) {
+    while ((tok = strtok_r(NULL, " \t\r\n", &tokptr))) {
       if (n >= uBufSize)
       {
         uBufSize += 8;
diff --git a/poppler/GlobalParams.cc b/poppler/GlobalParams.cc
index bf79585..293d7f3 100644
--- a/poppler/GlobalParams.cc
+++ b/poppler/GlobalParams.cc
@@ -24,6 +24,7 @@
 // Copyright (C) 2009 Kovid Goyal <kovid at kovidgoyal.net>
 // Copyright (C) 2010 Hib Eris <hib at hiberis.nl>
 // Copyright (C) 2010 Patrick Spendrin <ps_ml at gmx.de>
+// Copyright (C) 2010 Jakub Wilk <ubanus at users.sf.net>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -786,6 +787,7 @@ void GlobalParams::parseNameToUnicode(GooString *name) {
   char buf[256];
   int line;
   Unicode u;
+  char *tokptr;
 
   if (!(f = fopen(name->getCString(), "r"))) {
     error(-1, "Couldn't open 'nameToUnicode' file '%s'",
@@ -794,8 +796,8 @@ void GlobalParams::parseNameToUnicode(GooString *name) {
   }
   line = 1;
   while (getLine(buf, sizeof(buf), f)) {
-    tok1 = strtok(buf, " \t\r\n");
-    tok2 = strtok(NULL, " \t\r\n");
+    tok1 = strtok_r(buf, " \t\r\n", &tokptr);
+    tok2 = strtok_r(NULL, " \t\r\n", &tokptr);
     if (tok1 && tok2) {
       sscanf(tok1, "%x", &u);
       nameToUnicode->add(tok2, u);
diff --git a/poppler/PDFDoc.cc b/poppler/PDFDoc.cc
index 2d1477d..b650480 100644
--- a/poppler/PDFDoc.cc
+++ b/poppler/PDFDoc.cc
@@ -22,6 +22,7 @@
 // Copyright (C) 2009 Kovid Goyal <kovid at kovidgoyal.net>
 // Copyright (C) 2009 Axel Struebing <axel.struebing at freenet.de>
 // Copyright (C) 2010 Hib Eris <hib at hiberis.nl>
+// Copyright (C) 2010 Jakub Wilk <ubanus at users.sf.net>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -294,6 +295,7 @@ GBool PDFDoc::checkFooter() {
 void PDFDoc::checkHeader() {
   char hdrBuf[headerSearchSize+1];
   char *p;
+  char *tokptr;
   int i;
 
   pdfMajorVersion = 0;
@@ -312,7 +314,7 @@ void PDFDoc::checkHeader() {
     return;
   }
   str->moveStart(i);
-  if (!(p = strtok(&hdrBuf[i+5], " \t\n\r"))) {
+  if (!(p = strtok_r(&hdrBuf[i+5], " \t\n\r", &tokptr))) {
     error(-1, "May not be a PDF file (continuing anyway)");
     return;
   }
diff --git a/poppler/UnicodeMap.cc b/poppler/UnicodeMap.cc
index 381e4ca..fda0758 100644
--- a/poppler/UnicodeMap.cc
+++ b/poppler/UnicodeMap.cc
@@ -6,6 +6,20 @@
 //
 //========================================================================
 
+//========================================================================
+//
+// Modified under the Poppler project - http://poppler.freedesktop.org
+//
+// All changes made under the Poppler project to this file are licensed
+// under GPL version 2 or later
+//
+// Copyright (C) 2010 Jakub Wilk <ubanus at users.sf.net>
+//
+// To see a description of the changes please see the Changelog file that
+// came with your tarball or type make ChangeLog if you are building from git
+//
+//========================================================================
+
 #include <config.h>
 
 #ifdef USE_GCC_PRAGMAS
@@ -43,6 +57,7 @@ UnicodeMap *UnicodeMap::parse(GooString *encodingNameA) {
   char buf[256];
   int line, nBytes, i, x;
   char *tok1, *tok2, *tok3;
+  char *tokptr;
 
   if (!(f = globalParams->getUnicodeMapFile(encodingNameA))) {
     error(-1, "Couldn't find unicodeMap file for the '%s' encoding",
@@ -58,9 +73,9 @@ UnicodeMap *UnicodeMap::parse(GooString *encodingNameA) {
 
   line = 1;
   while (getLine(buf, sizeof(buf), f)) {
-    if ((tok1 = strtok(buf, " \t\r\n")) &&
-	(tok2 = strtok(NULL, " \t\r\n"))) {
-      if (!(tok3 = strtok(NULL, " \t\r\n"))) {
+    if ((tok1 = strtok_r(buf, " \t\r\n", &tokptr)) &&
+	(tok2 = strtok_r(NULL, " \t\r\n", &tokptr))) {
+      if (!(tok3 = strtok_r(NULL, " \t\r\n", &tokptr))) {
 	tok3 = tok2;
 	tok2 = tok1;
       }


More information about the poppler mailing list