summaryrefslogtreecommitdiff
path: root/ext/gd
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2003-12-15 20:34:48 +0000
committerIlia Alshanetsky <iliaa@php.net>2003-12-15 20:34:48 +0000
commite440d4fbea0482db8e7015e9939d991eddfa3113 (patch)
tree4a7a1a2cbae3cbdd956f92a2c70b3029900cfc67 /ext/gd
parentd4f64f88badd33ae87b9ec9b3120d532c8352b05 (diff)
downloadphp-git-e440d4fbea0482db8e7015e9939d991eddfa3113.tar.gz
Fixed bug #26635 (fixed look up for fonts in the current directory w/ZTS)
Diffstat (limited to 'ext/gd')
-rw-r--r--ext/gd/libgd/gdft.c42
1 files changed, 20 insertions, 22 deletions
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? */