]> granicus.if.org Git - php/commitdiff
Fixed bug #26635 (fixed look up for fonts in the current directory w/ZTS)
authorIlia Alshanetsky <iliaa@php.net>
Mon, 15 Dec 2003 20:34:48 +0000 (20:34 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Mon, 15 Dec 2003 20:34:48 +0000 (20:34 +0000)
ext/gd/libgd/gdft.c

index f642e0d7f52f9d7c15828fced352620346fb49e4..e75ec697cea9fe2e010c75b82cf7cdf3c8e490ef 100644 (file)
@@ -357,7 +357,7 @@ static void *fontFetch (char **error, void *key)
        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;
@@ -383,38 +383,43 @@ static void *fontFetch (char **error, void *key)
        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;
@@ -436,9 +441,6 @@ static void *fontFetch (char **error, void *key)
        if (!font_found) {
                gdPFree(a->fontlist);
                gdPFree(a);
-               if (fullname) {
-                       gdFree(fullname);
-               }
                *error = "Could not find/open font";
                return NULL;
        }
@@ -447,13 +449,9 @@ static void *fontFetch (char **error, void *key)
        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? */