iliaa           Mon Dec 15 15:34:58 2003 EDT

  Modified files:              (Branch: PHP_4_3)
    /php-src    NEWS 
    /php-src/ext/gd/libgd       gdft.c 
  Log:
  MFH: Fixed bug #26635 (fixed look up for fonts in the current directory 
  w/ZTS)
  
  
Index: php-src/NEWS
diff -u php-src/NEWS:1.1247.2.502 php-src/NEWS:1.1247.2.503
--- php-src/NEWS:1.1247.2.502   Sun Dec 14 20:18:46 2003
+++ php-src/NEWS        Mon Dec 15 15:34:56 2003
@@ -7,6 +7,8 @@
   (Jani)
 - Fixed header handler in NSAPI SAPI module (header->replace was ignored,
   send_default_content_type now sends value from php.ini). (Uwe Schindler)
+- Fixed bug #26635 (fixed look up for fonts in the current directory w/ZTS).
+  (Ilia)
 - Fixed bug #26604 (Apache2 SAPIs implicitly disable Keep-Alive). (Ilia)
 - Fixed bug #26595 (ext/domxml: XSLT_NAMESPACE undeclared). (Christian)
 - Fixed bug #26565 (strtotime("this month") resolving to the wrong month).
Index: php-src/ext/gd/libgd/gdft.c
diff -u php-src/ext/gd/libgd/gdft.c:1.11.2.11 php-src/ext/gd/libgd/gdft.c:1.11.2.12
--- php-src/ext/gd/libgd/gdft.c:1.11.2.11       Fri Nov 21 19:55:29 2003
+++ php-src/ext/gd/libgd/gdft.c Mon Dec 15 15:34:57 2003
@@ -358,7 +358,7 @@
        int font_found = 0;
        unsigned short platform, encoding;
        char *fontsearchpath, *fontlist;
-       char *fullname = NULL;
+       char fullname[MAXPATHLEN], cur_dir[MAXPATHLEN];
        char *name, *path=NULL, *dir;
        char *strtok_ptr;
        FT_Error err;
@@ -384,38 +384,43 @@
        for (name = gd_strtok_r (fontlist, LISTSEPARATOR, &strtok_ptr); name; name = 
gd_strtok_r (0, LISTSEPARATOR, &strtok_ptr)) {
                /* make a fresh copy each time - strtok corrupts it. */
                path = gdEstrdup (fontsearchpath);
-       
-               /*
-               * Allocate an oversized buffer that is guaranteed to be
-               * big enough for all paths to be tested.
-               */
-               fullname = gdRealloc (fullname, strlen (fontsearchpath) + strlen 
(name) + 6);
-       
+
                /* if name is an absolute filename then test directly */ 
                if (*name == '/' || (name[0] != 0 && name[1] == ':' && (name[2] == '/' 
|| name[2] == '\\'))) {
-                       sprintf(fullname, "%s", name);
+                       snprintf(fullname, sizeof(fullname) - 1, "%s", name);
                        if (access(fullname, R_OK) == 0) {
                                font_found++;
                                break;
                        }
                }
                for (dir = strtok (path, PATHSEPARATOR); dir; dir = strtok (0, 
PATHSEPARATOR)) {
-                       sprintf(fullname, "%s/%s", dir, name);
-                       if (access (fullname, R_OK) == 0) {
+                       if (!strcmp(dir, ".")) {
+#if HAVE_GETCWD
+                               dir = VCWD_GETCWD(cur_dir, MAXPATHLEN);
+#elif HAVE_GETWD
+                               dir = VCWD_GETWD(cur_dir);
+#endif
+                               if (!dir) {
+                                       continue;
+                               }
+                       }
+
+                       snprintf(fullname, sizeof(fullname) - 1, "%s/%s", dir, name);
+                       if (access(fullname, R_OK) == 0) {
                                font_found++;
                                break;
                        }
-                       sprintf(fullname, "%s/%s.ttf", dir, name);
-                       if (access (fullname, R_OK) == 0) {
+                       snprintf(fullname, sizeof(fullname) - 1, "%s/%s.ttf", dir, 
name);
+                       if (access(fullname, R_OK) == 0) {
                                font_found++;
                                break;
                        }
-                       sprintf(fullname, "%s/%s.pfa", dir, name);
+                       snprintf(fullname, sizeof(fullname) - 1, "%s/%s.pfa", dir, 
name);
                        if (access(fullname, R_OK) == 0) {
                                font_found++;
                                break;
                        }
-                       sprintf (fullname, "%s/%s.pfb", dir, name);
+                       snprintf(fullname, sizeof(fullname) - 1, "%s/%s.pfb", dir, 
name);
                        if (access(fullname, R_OK) == 0) {
                                font_found++;
                                break;
@@ -437,9 +442,6 @@
        if (!font_found) {
                gdPFree(a->fontlist);
                gdPFree(a);
-               if (fullname) {
-                       gdFree(fullname);
-               }
                *error = "Could not find/open font";
                return NULL;
        }
@@ -448,13 +450,9 @@
        if (err) {
                gdPFree(a->fontlist);
                gdPFree(a);
-               if (fullname) {
-                       gdFree(fullname);
-               }
                *error = "Could not read font";
                return NULL;
        }
-       gdFree(fullname);
 
        /* FIXME - This mapping stuff is imcomplete - where is the spec? */
 

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to