Menu

#96 [PHP] core dump when column_name returns as NULL from CCI

open
nobody
None
5
2012-02-24
2012-02-24
Jira Trac
No

{noformat}
-----Original Message-----
From: 한상훈windyhan@nhn.com
To: 강철규cgkang@nhn.com;
Cc: CUBRID기술지원dl_cubrid.support@nhn.com; 강동완dwkang@nhn.com;
Sent: 2012-02-23 (목) 12:32:00
Subject: RE: 중요 / RE: Cubrid + XE 연동문제
사용버전은 R4.0.1008 입니다.

core 가 발생했을 때의 SQL Log 를 보면 아래와 같습니다.

02/23 11:28:59.234 (63) prepare srv_h_id 1 (PC)
02/23 11:28:59.234 (63) execute srv_h_id 1 SELECT * FROM ncloudxe_module_trigger as module_trigger WHERE trigger_name = 'member.doLogin' and called_position = 'after'
02/23 11:28:59.234 (63) execute 0 tuple 1 time 0.000
02/23 11:28:59.234 (63) close_req_handle srv_h_id 1
02/23 11:28:59.238 COMMUNICATION ERROR net_read_header()
02/23 11:28:59.238 disconnect

core file 을 보니.. strlen 하다가 죽었는데요..
php 소스를 보면.. 아래의 위치에서. 진하게 칠한 부분에서 core 가 발생하였습니다.

CCI_GET_RESULT_INFO_NAME 을 수행해서 column_name 을 가져왔는데,
가져온 column_name 이 NULL 이어서 발생한 것입니다.

request-col_info 의 주소를 찍어보면 메모리가 깨진듯 해보입니다.

(gdb) p request-col_info
Cannot access memory at address 0x40
관련 php 소스

ZEND_FUNCTION(cubrid_column_names)
{
zval *req_id = NULL;
T_CUBRID_REQUEST *request;
char *column_name;
int i;
init_error();
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, r, req_id) == FAILURE) {
return;
}
ZEND_FETCH_RESOURCE(request, T_CUBRID_REQUEST *, req_id, -1, CUBRID-Request, le_request);
init_error_link(request-conn);
array_init(return_value);
for (i = 0; i request-col_count; i++) {
column_name = CCI_GET_RESULT_INFO_NAME(request-col_info, i + 1);
add_index_stringl(return_value, i, column_name, strlen(column_name), 1);
}
return;
}
#0 0x0000003550079ba0 in strlen () from /lib64/libc.so.6
(gdb) where
#0 0x0000003550079ba0 in strlen () from /lib64/libc.so.6
#1 0x00002b5fac575fd6 in zif_cubrid_column_names (ht=value optimized out, return_value=0x105d23d0, return_value_ptr=value optimized out,
this_ptr=value optimized out, return_value_used=value optimized out) at /home1/irteam/pkgs/RB-8.4.0/php_cubrid.c:2219
#2 0x00002b5fa82f0499 in zend_do_fcall_common_helper_SPEC (execute_data=0x2b5facd538f8) at /home1/irteam/pkgs/php-5.3.10/Zend/zend_vm_execute.h:320
#3 0x00002b5fa82efa2e in execute (op_array=0x1006dad8) at /home1/irteam/pkgs/php-5.3.10/Zend/zend_vm_execute.h:107
#4 0x00002b5fa82c8bc9 in zend_execute_scripts (type=8, retval=0x0, file_count=3) at /home1/irteam/pkgs/php-5.3.10/Zend/zend.c:1236
#5 0x00002b5fa8276428 in php_execute_script (primary_file=0x7fff10ba9c20) at /home1/irteam/pkgs/php-5.3.10/main/main.c:2308
#6 0x00002b5fa83513bd in php_handler (r=0xfe3dcd0) at /home1/irteam/pkgs/php-5.3.10/sapi/apache2handler/sapi_apache2.c:669
#7 0x000000000043673a in ap_run_handler (r=0xfe3dcd0) at config.c:157
#8 0x0000000000439982 in ap_invoke_handler (r=0xfe3dcd0) at config.c:376
#9 0x00000000004440c8 in ap_process_request (r=0xfe3dcd0) at http_request.c:282
#10 0x000000000044138c in ap_process_http_connection (c=0xfe31c10) at http_core.c:190
#11 0x000000000043d662 in ap_run_process_connection (c=0xfe31c10) at connection.c:43
#12 0x0000000000448530 in child_main (child_num_arg=value optimized out) at prefork.c:667
#13 0x00000000004487c5 in make_child (s=0xfb57848, slot=2) at prefork.c:768
#14 0x0000000000448867 in startup_children (number_to_start=3) at prefork.c:786
#15 0x000000000044933e in ap_mpm_run (_pconf=value optimized out, plog=value optimized out, s=0xfb57848) at prefork.c:1007
#16 0x00000000004240a8 in main (argc=3, argv=0x7fff10baa218) at main.c:739

TO 정차장님

위의 내용 정리해서 BTS-ing 해주세요.

이 메일은 나눔글꼴로 작성되었습니다. 설치하기

한상훈
Email windyhan@nhn.com

-----Original Message-----
From: 강철규cgkang@nhn.com
To: 백공열everblue@nhn.com; 이연수yeonsu.lee@nhn.com;
Cc: CUBRID기술지원dl_cubrid.support@nhn.com;
Sent: 2012-02-23 (목) 11:47:16
Subject: RE: 중요 / RE: Cubrid + XE 연동문제

안녕하세요

아래 메일에 보면 cubrid_column_names() 호출시 세그멘테이션 폴트가 발생했다고 하셨는데,
core파일이 있으면 원인을 좀 더 쉽게 파악할 수 있을테니
core 파일 위치를 알려주시길 부탁드립니다.

강철규 KANG CHOLGYU
Email cgkang@nhn.com

-----Original Message-----
From: 이연수yeonsu.lee@nhn.com
To: 정일동[1_dong]ildong.jung@nhn.com;
Cc: CUBRID기술지원dl_cubrid.support@nhn.com;
Sent: 2012-02-23 (목) 11:11:18
Subject: FW: 중요 / RE: Cubrid + XE 연동문제
전달드려요~

-----Original Message-----
From: 백공열everblue@nhn.com
To: 최희선heesun.choi89@nhn.com; XE개발팀dl_xe@nhn.com;
Cc: 신승엽flysky@nhn.com; 이연수yeonsu.lee@nhn.com; 박중헌[데이타플랫폼운영팀]thinks1221@nhn.com; 김주현[ncloud]kimjoo@nhn.com;
Sent: 2012-02-23 (목) 10:06:54
Subject: 중요 / RE: Cubrid + XE 연동문제
최희선님이 보내주는 쿼리와 cubrid_column_names() 함수를 사용하는 샘플을 만들어 보았습니다.
아래가 해당 내용이고 테스트 결과 문제가 없습니다.

XE 에서도 매번 발생하는게 아니라 몇번에 한번씩 발생하는것 같은데요.
PHP Driver 문제가 아니라 XE 버그 같다는 생각이듭니다.

요 부분 이번에 확실하게 원인 파악해보았으면 합니다.

Test URL : http://10.98.133.93/test2.php / phpinfo URL : http://10.98.133.93/test.php
Test Source :
?php
$conn = cubrid_connect(10.99.66.41, 20203, ncloud,xeuser,xeuser);
$result = cubrid_execute($conn, SELECT * FROM ncloudxe_module_trigger as module_trigger WHERE trigger_name = 'member.doLogin' and called_position = 'after');
$column_names = cubrid_column_names($result);
$column_types = cubrid_column_types($result);
print pre;
$server_info = cubrid_get_server_info($conn);
$client_info = cubrid_get_client_info();
printf(%-30s %s\n, Server Info:, $server_info);
printf(%-30s %s\n, Client Info:, $client_info);

printf(%-30s %-30s %-15s\n, Column Names, Column Types, Column Maxlen);
for($i = 0, $size = count($column_names); $i $size; $i++) {
$column_len = cubrid_field_len($result, $i);
printf(%-30s %-30s %-15s\n, $column_names[$i], $column_types[$i], $column_len);
}
print /pre;
cubrid_disconnect($conn);
?

이 메일은 나눔글꼴로 작성되었습니다. 설치하기

백공열 Baek KongYoul
Email everblue@nhn.com

-----Original Message-----
From: 최희선heesun.choi89@nhn.com
To: 백공열everblue@nhn.com;
Cc: 신승엽flysky@nhn.com; XE개발팀dl_xe@nhn.com;
Sent: 2012-02-22 (수) 22:25:03
Subject: Cubrid + XE 연동문제
안녕하세요 백공열 차장님.

큐브리드와 XE 연동이 이번에도 제대로 되지 않았습니다. ^^;
말씀하신대로 큐브리드로의 이전은 잠시 멈추도록 하겠습니다.
그리고 문제가 발생한 부분에 대해 말씀드립니다.

쿼리 SELECT * FROM ncloudxe_module_trigger as module_trigger WHERE trigger_name = 'member.doLogin' and called_position = 'after'
cubrid_column_names() 수행시 세그먼테이션 Fault 발생.

확인 부탁드립니다.
감사합니다. 최희선 드림.
{noformat}

Discussion

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.