From 1e464e5b55f81b7fb9476a55f481fe1d2a25d6d9 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Tue, 9 Jan 2024 20:40:22 +0000 Subject: [PATCH] ext/gd: Fix GH-13082 Issue occur when compiling with recent clang releases (> 13) and with the '-Os' optimisation level, after using `imageloadfont` which returns a proper GdFont class leads to a subtle bug when attempting to use via the imagefont* function. --- NEWS | 4 ++++ ext/gd/gd.c | 8 ++++---- ext/gd/tests/gh13082.gdf | Bin 0 -> 53776 bytes ext/gd/tests/gh13082.phpt | 16 ++++++++++++++++ 4 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 ext/gd/tests/gh13082.gdf create mode 100644 ext/gd/tests/gh13082.phpt diff --git a/NEWS b/NEWS index f218cc9a6df..b723d6e14d2 100644 --- a/NEWS +++ b/NEWS @@ -25,6 +25,10 @@ PHP NEWS (Jakub Zelenka) . Fixed bug GH-12905 (FFI::new interacts badly with observers). (nielsdos) +- GD: + . Fixed GH-13082 undefined behavior with GdFont instances handling with + imageload* and imagechar*. (David Carlier) + - Intl: . Fixed GH-12943 (IntlDateFormatter::__construct accepts 'C' as valid locale). (David Carlier) diff --git a/ext/gd/gd.c b/ext/gd/gd.c index 1d8b3a0a1d4..c86a663c5b7 100644 --- a/ext/gd/gd.c +++ b/ext/gd/gd.c @@ -2681,8 +2681,8 @@ static gdFontPtr php_find_gd_font(zend_object *font_obj, zend_long font_int) */ static void php_imagefontsize(INTERNAL_FUNCTION_PARAMETERS, int arg) { - zend_object *font_obj; - zend_long font_int; + zend_object *font_obj = NULL; + zend_long font_int = 0; gdFontPtr font; ZEND_PARSE_PARAMETERS_START(1, 1) @@ -2750,8 +2750,8 @@ static void php_imagechar(INTERNAL_FUNCTION_PARAMETERS, int mode) int ch = 0, col, x, y, i, l = 0; unsigned char *str = NULL; zend_object *font_obj; - zend_long font_int; - gdFontPtr font; + zend_long font_int = 0; + gdFontPtr font = NULL; ZEND_PARSE_PARAMETERS_START(6, 6) Z_PARAM_OBJECT_OF_CLASS(IM, gd_image_ce) diff --git a/ext/gd/tests/gh13082.gdf b/ext/gd/tests/gh13082.gdf new file mode 100644 index 0000000000000000000000000000000000000000..44669f3d12b92f2ef2144700e374b8f2d529c587 GIT binary patch literal 53776 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 V9%sf`&~f1h-#H^@h#__@^M3-gGN}Ln literal 0 HcmV?d00001 diff --git a/ext/gd/tests/gh13082.phpt b/ext/gd/tests/gh13082.phpt new file mode 100644 index 00000000000..7434d699bee --- /dev/null +++ b/ext/gd/tests/gh13082.phpt @@ -0,0 +1,16 @@ +--TEST-- +GH-13082 - imagefontwidth/height unexpectedly throwing an exception on a valid GdFont object. +--EXTENSIONS-- +gd +--FILE-- + +--EXPECT-- +int(12) +int(20)