|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2003-01-08 17:52 UTC] jeffabruce at hotmail dot com
I had FreeType 1.x installed only, not FreeType 2.x. Problem #1 After extracting the tarball and running 'configure' (with various options), the output indicated that I had FreeType 2 support. Problem #2 So, I built PHP thinking everything was good to go. However, when I tried to use ImageTTFText(), I got a segmentaion fault. Looking at the code in gd.c, I noticed that there is a point in php_imagettftext_common() that looks like: #if HAVE_GD_STRINGFT error = gdImageStringFT(... #elif HAVE_GD_STRINGTTF error = gdImageStringTTF(... #endif ... if ( error ) ... This code is clearly risky at best since variable 'error' is undefined if neither HAVE_GD_STRINGFT or HAVE_GD_STRINGTTF is defined. I solved my issue of not having support for ImageTTFText() by installing FreeType 2.x. But the long term solution should include addressing these 2 issues. PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Oct 29 23:00:01 2025 UTC |
This bug is NOT yet fixed. In 4.3.1 the code can and still does produce bogus code that doesn't set error. my main/php_config.h generates with this area (not verbatim): /* */ /* #undef HAVE_GD_STRINGTTF */ /* */ /* #undef HAVE_GD_STRINGFT */ /* */ /* #undef HAVE_GD_STRINGFTEX */ /* */ #define USE_GD_IMGSTRTTF 1 /* */ #define USE_GD_IMGSTRTTF 1 Notice we have neither FT nor the FTEX, nor TTF! So why in the world does USE_GD_IMGSTRTTF get 1? TAke a look at gd.c:2937 In this case error still ends up undefined as we never execute any of the four functions!!!! I traced the calls back up, the bt is included below along with a print error to point out the fact. GDB OUTPUT: #0 0x080c114b in xbuf_format_converter (xbuf=0xbfffd1a0, fmt=0x40357707 "s", ap=0xbfffd260) at /usr/src/webserver/php-4.3.1/main/spprintf.c:438 #1 0x080c1601 in vspprintf (pbuf=0xbfffd208, max_len=0, format=0x40357706 "%s", ap=0xbfffd25c) at /usr/src/webserver/php-4.3.1/main/spprintf.c:622 #2 0x080be757 in php_verror (docref=0x0, params=0x80f92af "", type=2, format=0x40357706 "%s", args=0xbfffd25c) at /usr/src/webserver/php-4.3.1/main/main.c:423 #3 0x080bea1d in php_error_docref0 (docref=0x0, type=2, format=0x40357706 "%s") at /usr/src/webserver/php-4.3.1/main/main.c:508 #4 0x403489f6 in php_imagettftext_common (ht=8, return_value=0x817e304, this_ptr=0x0, return_value_used=0, mode=0, extended=0) at /usr/src/webserver/php-4.3.1/ext/gd/gd.c:2957 #5 0x4034861b in zif_imagettftext (ht=8, return_value=0x817e304, this_ptr=0x0, return_value_used=0) at /usr/src/webserver/php-4.3.1/ext/gd/gd.c:2835 #6 0x402fb542 in zend_assign_to_variable_reference () from /usr/local/libexec/php-4.3.1/ZendOptimizer.so #7 0x40304a02 in zend_oe () from /usr/local/libexec/php-4.3.1/ZendOptimizer.so #8 0x080c02cb in php_execute_script (primary_file=0xbffffcb0) at /usr/src/webserver/php-4.3.1/main/main.c:1576 #9 0x080f8d84 in main (argc=2, argv=0xbffffd54) at /usr/src/webserver/php-4.3.1/sapi/cgi/cgi_main.c:1424 <MORE BUT WE'RE ONLY REALLY INTERESTED IN FRAMES 4->0> (gdb) up #4 0x403489f6 in php_imagettftext_common (ht=8, return_value=0x817e304, this_ptr=0x0, return_value_used=0, mode=0, extended=0) at /usr/src/webserver/php-4.3.1/ext/gd/gd.c:2957 2957 /usr/src/webserver/php-4.3.1/ext/gd/gd.c: No such file or directory. in /usr/src/webserver/php-4.3.1/ext/gd/gd.c (gdb) print error $2 = 0x20 <Address 0x20 out of bounds> (gdb) And the PHP script that will reproduce this every time:: mloftis@modwest:/htdocs/www/gd/431$ cat ttf.php #!/usr/local/bin/php-4.3.1-4 <?php header ("Content-type: image/png"); $im = imagecreate (400, 30); $black = imagecolorallocate ($im, 0, 0, 0); $white = imagecolorallocate ($im, 255, 255, 255); imagettftext ($im, 20, 0, 10, 20, -$white, "/usr/share/fonts/default/TrueType/arib____.ttf", "Ich will muss"); imagepng ($im); imagedestroy ($im); exit; ?> And our ./configure statment. ./configure --disable-debug --disable-rpath --with-pear=/usr/local/lib/php-4.3.1 --with-config-file-path=/etc --prefix=/usr/local --libexecdir=/usr/local/libexec/php-4.3.1 --enable-shared=yes --enable-track-vars --enable-magic-quotes --enable-trans-sid --with-kerberos --enable-all=shared --without-cyrus --without-fbsql --without-fdftk --without-fribidi --without-hwapi --without-informix --without-ingres --without-interbase --without-ircg --without-java --without-mcve --without-msession --without-oracle --without-oci8 --without-ovrimos --without-qtdom --without-readline --without-libedit --without-sybase --without-sybase-ct --without-msql --without-mssql --with-imap-ssl --with-openssl --enable-session --with-sablot-js=/usr --with-xslt-sablot=/usr --with-gdbm=shared,/usr --with-ndbm=shared,/usr --with-db2=shared,/usr --with-db3=shared,/usr --with-unixODBC=shared,/usr --disable-calendar --enable-overload --without-ncurses --disable-mime-magic --with-zlib --with-pcre-regex --disable-yp --disable-path-info-check --enable-discard-path --enable-mw-php-ini --enable-mw-deprecated-extension --with-jpeg-dir=/usr --enable-gd-native-ttf --with-ttf=/usr --with-png-dir=/usr Relevant output around the GD extension config: checking for FDF support... no checking whether to enable the bundled filePro support... yes, shared checking for FriBidi support... no checking whether to enable FTP support... yes, shared checking for GD support... yes, shared checking for the location of libjpeg... yes, shared checking for the location of libpng... yes, shared checking for the location of libXpm... yes, shared checking for FreeType 1.x support... yes, shared checking for FreeType 2... yes, shared checking for T1lib support... yes, shared checking whether to enable truetype string function in GD... yes, shared checking for fabsf... yes checking for floorf... yes checking for jpeg_read_header in -ljpeg... yes checking for png_write_image in -lpng... yes If configure fails try --with-xpm-dir=<DIR> If configure fails try --with-freetype-dir=<DIR> checking for GNU gettext support... yes, shared checking for bindtextdomain in -lintl... no checking for bindtextdomain in -lc... yes Need anything else?