[완료] centos5.5 x86_64 환경에서 php용 gnupg중 ERROR_EXCEPTION 이 발생하면 Segmentation fault 를 일으킵니다
http://www.php.net/manual/en/book.gnupg.php 를 참고하여, php용 GnuPG 모듈을 사용중입니다.
# cat > test.php
<?php
$gpg = new gnupg();
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);
//$gpg->seterrormode(gnupg::ERROR_WARNING); // 이 설정일때는 x86_64, i386에 상관없이 정상작동
try { // ERROR_EXCEPTION이 발생하지 않는다면, x86_64, i386 상관없이 정상작동
$gpg->adddecryptkey('gpg_key_name','password');
$plaintext = $gpg->decrypt($ciphertext);
echo "복호화 성공 : ".$plaintext;
} catch (Exception $e) { // ERROR_EXCEPTION이 발생하면 x86_64환경에선 Segmentation fault / i386에서는 정상작동
echo "요청한 정보가 유효하지 않습니다(".$e->getMessage().")"."\n";
}
?>
위의 소스를 웹브라우저로 실행하면, 아무결과도 출력하지 않고
/var/log/httpd/error_log 에
[Thu Jun 24 20:43:41 2010] [notice] child pid 10046 exit signal Segmentation fault (11) 같은 로그를 남깁니다.
반면 쉘 상에서
# php test.php 라고 하면
'요청한 정보가 유효하지 않습니다(decrypt failed)'
라는 메시지를 뿌리며 정상적인 작동을 합니다
virtualbox상의 centos5.5.x86_64 , fedora13.x86_64 환경에서 테스트 해본결과 마찬가지였으며,
centos5.5.i386에서는 ERROR_EXCEPTION이 제대로 작동하였습니다..
하루종일 삽질해봐도 해결책을 못찾아서 혹시나 하고 질문 올려봅니다..
전문가가 아니라, 취미로 하는거라 잘 모릅니다 ㅠㅠ
# gdb /usr/sbin/httpd /tmp/core.31459
....
....
Reading symbols from /usr/lib64/php/modules/zip.so...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/php/modules/zip.so
Core was generated by `/usr/sbin/httpd'.
Program terminated with signal 11, Segmentation fault.
#0 0x00002b817106e403 in instanceof_function_ex () from /etc/httpd/modules/libphp5.so
(gdb) bt
#0 0x00002b817106e403 in instanceof_function_ex () from /etc/httpd/modules/libphp5.so
#1 0x00002b817106e3db in instanceof_function () from /etc/httpd/modules/libphp5.so
#2 0x00002b817108e109 in zend_throw_exception () from /etc/httpd/modules/libphp5.so
#3 0x00002b8176642061 in zif_gnupg_decrypt (ht=1, return_value=0x2b817449a800,
return_value_ptr=, this_ptr=,
return_value_used=) at /var/tmp/gnupg/gnupg.c:1209
#4 0x00002b817451d27e in xdebug_execute_internal () from /usr/lib64/php/modules/xdebug.so
#5 0x00002b81710c3d5d in ?? () from /etc/httpd/modules/libphp5.so
#6 0x00002b817109a44b in execute () from /etc/httpd/modules/libphp5.so
#7 0x00002b817451cef3 in xdebug_execute () from /usr/lib64/php/modules/xdebug.so
#8 0x00002b8171076ba5 in zend_execute_scripts () from /etc/httpd/modules/libphp5.so
#9 0x00002b8171027cc8 in php_execute_script () from /etc/httpd/modules/libphp5.so
#10 0x00002b81710fec2d in ?? () from /etc/httpd/modules/libphp5.so
#11 0x00002b8164a84a4a in ap_run_handler ()
#12 0x00002b8164a87ec2 in ap_invoke_handler ()
#13 0x00002b8164a92918 in ap_process_request ()
#14 0x00002b8164a8fb50 in ?? ()
#15 0x00002b8164a8bcb2 in ap_run_process_connection ()
#16 0x00002b8164a96769 in ?? ()
#17 0x00002b8164a969fa in ?? ()
#18 0x00002b8164a96ab0 in ?? ()
#19 0x00002b8164a9779b in ap_mpm_run ()
#20 0x00002b8164a71e48 in main ()
(gdb)
(gdb 가 뭐하는건지는 모르겠지만... 일단 올려봅니다..)
# httpd -v
Server version: Apache/2.2.3
Server built: Apr 4 2010 17:18:37
# gpg --version
gpg (GnuPG) 1.4.5
# pecl list
Installed packages, channel pecl.php.net:
=========================================
Package Version State
gnupg 1.3.1 stable
xdebug 2.0.5 stable
혹시 아시는 분 있으면 답변 부탁드립니다...
[완료]
http://kldp.org/node/116345
댓글 달기