_citrus_iconv_convert and php bug
Stanislav Grinkin via freebsd-i18n <[email protected]> Tue, 23 Jun 2020 15:15:12 +0300 (MSK)
| Newsgroups | gmane.os.freebsd.devel.internationalization |
|---|---|
| Message-ID | <[email protected]> |
Hi all,
I'm not familiar in C but may be somebody has idea about this bug in php
or/and iconv implementation in freebsd libc.
Shortly:
php -r 'echo iconv("UTF-8", "UTF-8", "Hello, world.\n");'
Bus error (core dumped)
bug desribed in a few places:
https://bugs.php.net/bug.php?id=74014
https://bugs.php.net/bug.php?id=72198
it seems bug does exist even in php 7.x.
I caught it in very old version php 5.6.40 - some old site on old joomla
framework.
Well, we have php.core and what we see:
uname -a
FreeBSD space 12.1-RELEASE-p4 FreeBSD 12.1-RELEASE-p4 GENERIC amd64
gdb sapi/cli/php php.core
GNU gdb (GDB) 9.2 [GDB v9.2 for FreeBSD]
<skip>
Reading symbols from sapi/cli/php...
[New LWP 100454]
Core was generated by `sapi/cli/php -r echo iconv("UTF-8", "UTF-8",
"Hello, world.\n");'.
Program terminated with signal SIGBUS, Bus error.
#0 0x0000000801296711 in _citrus_iconv_convert (cv=0x80253a000,
in=0x7fffffffe190,
inbytes=0x7fffffffe1a0, out=0x7fffffffe1b8, outbytes=0x7fffffffe1c0,
flags=0, nresults=0x0)
at /usr/src/lib/libc/iconv/citrus_iconv.h:62
62 /usr/src/lib/libc/iconv/citrus_iconv.h: No such file or directory.
warning: File "/usr/local/src/php-5.6.40/.gdbinit" auto-loading has been
declined by your `auto-load safe-path' set to
"$debugdir:$datadir/auto-load".
To enable execution of this file add
--Type <RET> for more, q to quit, c to continue without paging--
add-auto-load-safe-path /usr/local/src/php-5.6.40/.gdbinit
line to your configuration file "/root/.gdbinit".
To completely disable this security protection add
set auto-load safe-path /
line to your configuration file "/root/.gdbinit".
For more information about this security protection see the
"Auto-loading safe path" section in the GDB manual. E.g., run from the
shell:
info "(gdb)Auto-loading safe path"
(gdb) bt
#0 0x0000000801296711 in _citrus_iconv_convert (cv=0x80253a000,
in=0x7fffffffe190,
inbytes=0x7fffffffe1a0, out=0x7fffffffe1b8, outbytes=0x7fffffffe1c0,
flags=0, nresults=0x0)
at /usr/src/lib/libc/iconv/citrus_iconv.h:62
#1 __bsd_iconv (handle=0x80253a000, in=0x7fffffffe190,
szin=0x7fffffffe1a0, out=0x7fffffffe1b8,
szout=0x7fffffffe1c0) at /usr/src/lib/libc/iconv/bsd_iconv.c:135
#2 0x000000000099cf7b in php_iconv_string (in_p=0x801cddca0 "Hello,
world.\n", in_len=14,
out=0x7fffffffe208, out_len=0x7fffffffe210, out_charset=<optimized
out>,
in_charset=<optimized out>) at ext/iconv/iconv.c:653
#3 0x000000000099a5dd in php_if_iconv (ht=<optimized out>,
return_value=0x801c9fa10,
return_value_ptr=<optimized out>, this_ptr=<optimized out>,
return_value_used=<optimized out>)
at ext/iconv/iconv.c:2490
#4 0x0000000000bded49 in zend_do_fcall_common_helper_SPEC
(execute_data=0x801c6bd20)
at Zend/zend_vm_execute.h:558
#5 0x0000000000b9e2e8 in execute_ex (execute_data=0x801c6bd20) at
Zend/zend_vm_execute.h:363
#6 0x0000000000b65e21 in zend_eval_stringl (str=<optimized out>,
str_len=<optimized out>,
retval_ptr=<optimized out>, string_name=<optimized out>) at
Zend/zend_execute_API.c:1080
#7 0x0000000000b6621c in zend_eval_stringl_ex (
str=0x7fffffffedb0 "echo iconv(\"UTF-8\", \"UTF-8\", \"Hello,
world.\\n\");",
str_len=-443987883, retval_ptr=0x7fffffffe1a0,
string_name=0x7fffffffe1b8 "@\372\311\001\b",
handle_exceptions=1) at Zend/zend_execute_API.c:1127
#8 zend_eval_string_ex (
str=0x7fffffffedb0 "echo iconv(\"UTF-8\", \"UTF-8\", \"Hello,
world.\\n\");",
retval_ptr=0x7fffffffe1a0, string_name=0x7fffffffe1b8
"@\372\311\001\b", handle_exceptions=1)
a piece of code at ext/iconv/iconv.c:653:
result = iconv(cd, (char **) &in_p, &in_left, (char **) &out_p, &out_left);
That version of php, compiled under linux
(Linux test 4.4.217 #1 SMP Thu Mar 26 14:44:04 CDT 2020 x86_64 Intel(R)
Core(TM) i3-2120 CPU @ 3.30GHz GenuineIntel GNU/Linux)
works correctly.
Has anybody ideas how to fix it?
--
Best regards,
Stanislav
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-i18n
To unsubscribe, send any mail to "[email protected]"