summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/gd/gd.c2
-rw-r--r--ext/gd/libgd/gd.c21
-rw-r--r--ext/gd/libgd/gdft.c5
3 files changed, 18 insertions, 10 deletions
diff --git a/ext/gd/gd.c b/ext/gd/gd.c
index dd8a7e7996..ec097e9e8e 100644
--- a/ext/gd/gd.c
+++ b/ext/gd/gd.c
@@ -440,7 +440,7 @@ PHP_RSHUTDOWN_FUNCTION(gd)
/* }}} */
#if HAVE_GD_BUNDLED
-#define PHP_GD_VERSION_STRING "bundled (2.0.12 compatible)"
+#define PHP_GD_VERSION_STRING "bundled (2.0.14 compatible)"
#elif HAVE_LIBGD20
#define PHP_GD_VERSION_STRING "2.0 or higher"
#elif HAVE_GDIMAGECOLORRESOLVE
diff --git a/ext/gd/libgd/gd.c b/ext/gd/libgd/gd.c
index f57e8b7920..a71a8d7ea1 100644
--- a/ext/gd/libgd/gd.c
+++ b/ext/gd/libgd/gd.c
@@ -873,6 +873,11 @@ static void gdImageAntiAliasedApply (gdImagePtr im, int px, int py)
float p_dist, p_alpha;
unsigned char opacity;
+ /* 2.0.13: bounds check! AA_opacity is just as capable of overflowing as the main pixel array. Arne Jorgensen. */
+ if (!gdImageBoundsSafeMacro(im, px, py)) {
+ return;
+ }
+
/*
* Find the perpendicular distance from point C (px, py) to the line
* segment AB that is being drawn. (Adapted from an algorithm from the
@@ -2060,12 +2065,8 @@ void gdImageCopyMerge (gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int s
tox++;
continue;
}
- /*
- * If it's the same image, mapping is NOT trivial since we
- * merge with greyscale target, but if pct is 100, the grey
- * value is not used, so it becomes trivial. pjw 2.0.12.
- */
- if (dst == src && pct == 100) {
+ /* If it's the same image, mapping is trivial */
+ if (dst == src) {
nc = c;
} else {
dc = gdImageGetPixel(dst, tox, toy);
@@ -2105,8 +2106,12 @@ void gdImageCopyMergeGray (gdImagePtr dst, gdImagePtr src, int dstX, int dstY, i
tox++;
continue;
}
- /* If it's the same image, mapping is trivial */
- if (dst == src) {
+ /*
+ * If it's the same image, mapping is NOT trivial since we
+ * merge with greyscale target, but if pct is 100, the grey
+ * value is not used, so it becomes trivial. pjw 2.0.12.
+ */
+ if (dst == src && pct == 100) {
nc = c;
} else {
dc = gdImageGetPixel(dst, tox, toy);
diff --git a/ext/gd/libgd/gdft.c b/ext/gd/libgd/gdft.c
index c31e6e5867..38b1b88bfc 100644
--- a/ext/gd/libgd/gdft.c
+++ b/ext/gd/libgd/gdft.c
@@ -790,7 +790,8 @@ gdImageStringFTEx (gdImage * im, int *brect, int fg, char *fontlist, double ptsi
char *tmpstr = NULL;
int render = (im && (im->trueColor || (fg <= 255 && fg >= -255)));
FT_BitmapGlyph bm;
- int render_mode = FT_LOAD_RENDER | FT_LOAD_FORCE_AUTOHINT;
+ /* 2.0.13: Bob Ostermann: don't force autohint, that's just for testing freetype and doesn't look as good */
+ int render_mode = FT_LOAD_DEFAULT;
int m, mfound;
/* Now tuneable thanks to Wez Furlong */
double linespace = LINESPACE;
@@ -909,6 +910,8 @@ gdImageStringFTEx (gdImage * im, int *brect, int fg, char *fontlist, double ptsi
}
/* newlines */
if (ch == '\n') {
+ /* 2.0.13: reset penf.x. Christopher J. Grayce */
+ penf.x = 0;
penf.y -= (long)(face->size->metrics.height * linespace);
penf.y = (penf.y - 32) & -64; /* round to next pixel row */
x1 = (int)(penf.x * cos_a - penf.y * sin_a + 32) / 64;