From: Ilia Alshanetsky Date: Mon, 15 Dec 2003 20:34:48 +0000 (+0000) Subject: Fixed bug #26635 (fixed look up for fonts in the current directory w/ZTS) X-Git-Tag: php-5.0.0b3RC1~55 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e440d4fbea0482db8e7015e9939d991eddfa3113;p=php Fixed bug #26635 (fixed look up for fonts in the current directory w/ZTS) --- diff --git a/ext/gd/libgd/gdft.c b/ext/gd/libgd/gdft.c index f642e0d7f5..e75ec697ce 100644 --- a/ext/gd/libgd/gdft.c +++ b/ext/gd/libgd/gdft.c @@ -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? */