From: Ilia Alshanetsky Date: Mon, 15 Dec 2003 20:34:57 +0000 (+0000) Subject: MFH: Fixed bug #26635 (fixed look up for fonts in the current directory X-Git-Tag: php-4.3.5RC1~55 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4ae82d218913b0bb9b8a35468995a09f5f0c98f5;p=php MFH: Fixed bug #26635 (fixed look up for fonts in the current directory w/ZTS) --- diff --git a/NEWS b/NEWS index 060882b671..a355c8bfbc 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,8 @@ PHP 4 NEWS (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). diff --git a/ext/gd/libgd/gdft.c b/ext/gd/libgd/gdft.c index 9f5be33854..0875850b11 100644 --- a/ext/gd/libgd/gdft.c +++ b/ext/gd/libgd/gdft.c @@ -358,7 +358,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; @@ -384,38 +384,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; @@ -437,9 +442,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; } @@ -448,13 +450,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? */