php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #32893 imagettftext crash
Submitted: 2005-04-29 21:26 UTC Modified: 2005-05-02 11:40 UTC
From: php at fiddaman dot net Assigned: pajoye (profile)
Status: Closed Package: GD related
PHP Version: 4.3.11 OS: Solaris 9
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: php at fiddaman dot net
New email:
PHP Version: OS:

 

 [2005-04-29 21:26 UTC] php at fiddaman dot net
Description:
------------
PHP crashes in imagettftext - worked fine in 4.3.10

./configure \
                --prefix=/opt/php \
                --with-exec-dir=/opt/php/bin \
                --with-apxs2=/opt/apache/bin/apxs \
                --enable-memory-limit \
                --with-iconv \
                --enable-ftp \
                --enable-mbstring \
                --with-mbstring=all \
                --with-gettext \
                --enable-calendar \
                --with-mime-magic \
                --with-mysql \
                --with-mysqli=/opt/mysql/bin/mysql_config \
                \
                --with-openssl=/opt/openssl \
                --with-mysql=/opt/mysql \
                --with-gdbm=/opt/GNUgdbm \
                --with-db4=/opt/newdb \
                --with-dom=/opt/libxml2 \
                --with-gmp=/opt/GNUmp \
                --with-mcrypt=/opt/libmcrypt \
                \
                --with-imap=/opt/c-client \
                --with-imap-ssl=/opt/openssl \
                \
                --with-zlib=/usr \
                --with-zlib-dir=/usr \
                --with-bz2=/usr \
                \
                --with-gd \
                --with-jpeg-dir=/opt/libjpg \
                --with-png-dir=/opt/libpng \
                --with-freetype-dir=/opt/freetype


Reproduce code:
---------------
<?php
        $img = imagecreate(400, 70);
        $font_colour = imagecolorallocate($img, 0, 0x50, 0);

        imagettftext($img, 11/81*64, 0, 0, 27,
            "$font_colour", "/tmp/federation.ttf",
            "test");
        imagedestroy($img);
?>


Expected result:
----------------
No errors.

Actual result:
--------------
#0  0x00000001001a70b4 in zend_parse_va_args (num_args=4,
    type_spec=0x10023cd7b "lllss|a", va=0xffffffff7fffe898, flags=0)
    at /spool/src/build/php-4.3.11/Zend/zend_API.c:260
#1  0x00000001001a7b18 in zend_parse_parameters (num_args=8,
    type_spec=0x10023cd78 "rddlllss|a")
    at /spool/src/build/php-4.3.11/Zend/zend_API.c:552
#2  0x0000000100071a7c in php_imagettftext_common (ht=8,
    return_value=0x10061dd28, this_ptr=0x0, return_value_used=0, mode=0,
    extended=0) at /spool/src/build/php-4.3.11/ext/gd/gd.c:3042
#3  0x00000001001bb0c4 in execute (op_array=0x10063b2a8)
    at /spool/src/build/php-4.3.11/Zend/zend_execute.c:1654
#4  0x00000001001a64b0 in zend_execute_scripts (type=8, retval=0x0,
    file_count=3) at /spool/src/build/php-4.3.11/Zend/zend.c:926
#5  0x0000000100173ba0 in php_execute_script (primary_file=0xffffffff7ffffaa0)
    at /spool/src/build/php-4.3.11/main/main.c:1745
#6  0x00000001001c3f08 in main (argc=2, argv=0xffffffff7ffffb98)
    at /spool/src/build/php-4.3.11/sapi/cli/php_cli.c:828


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2005-04-30 03:45 UTC] sniper@php.net
Please try using this CVS snapshot:

  http://snaps.php.net/php4-STABLE-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php4-win32-STABLE-latest.zip

I can't reproduce this crash.
 [2005-04-30 13:53 UTC] php at fiddaman dot net
Same result with the snapshot:

Starting program: /spool/src/build/php4-STABLE-200504301042/sapi/cli/php t

Program received signal SIGSEGV, Segmentation fault.
0x00000001001a6df4 in zend_parse_va_args (num_args=4,
    type_spec=0x10023d1b3 "lllss|a", va=0xffffffff7fffe978, flags=0)
    at /spool/src/build/php4-STABLE-200504301042/Zend/zend_API.c:260
260                                                     *p = Z_LVAL_PP(arg);

it looks like a memory alignment problem, the SPARC MMU won't allow a 32 or 64-bit read that isn't aligned.

I added this just before line 260:

zend_printf("Alignment: %d\n", __alignof__(arg));

which gives:

% sapi/cli/php t
Alignment: 8
zsh: bus error (core dumped)  sapi/cli/php t
 [2005-05-01 01:29 UTC] pajoye@php.net
Which Freetype version do you use?

Please give us a link to the TTF file you use.


 [2005-05-01 13:59 UTC] php at fiddaman dot net
Here's a patch which fixes the problem. The variable being passed to the zend argument parser was too small to hold the result (int versus long).

--- ext/gd/gd.c~        2005-05-01 11:36:21.134419000 +0000
+++ ext/gd/gd.c 2005-05-01 11:42:37.369849000 +0000
@@ -3017,7 +3017,8 @@
 {
        zval *IM, *EXT = NULL;
        gdImagePtr im=NULL;
-       int col = -1, x = -1, y = -1, str_len, fontname_len, i, brect[8];
+       long col = -1, x = -1, y = -1;
+       int str_len, fontname_len, i, brect[8];
        double ptsize, angle;
        unsigned char *str = NULL, *fontname = NULL;
        char *error = NULL;


I'm using freetype 2.1.3 and gd 2.0.15 but it wasn't getting to even call a function in those libraries.

A simpler test case which doesn't need the font file. It generates an error in 4.3.10 but still crashes the snapshot.

% cat test
<?php
        $img = imagecreate(400, 70);
        imagettftext($img, 11/81*64, 0, 0, 27, 0, "/dev/null", "test");
?>


% ./php4-STABLE-200504301042/sapi/cli/php test
zsh: bus error (core dumped)  ./php4-STABLE-200504301042/sapi/cli/php test

% ./php-4.3.10/sapi/cli/php test
PHP Warning:  imagettftext(): Could not read font in /spool/src/build/test on line 3
 [2005-05-02 11:40 UTC] pajoye@php.net
This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.

PHP4 Branch was not synced with head.

Thanks for the notice

--Pierre
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Wed Jul 02 02:01:38 2025 UTC