File tree Expand file tree Collapse file tree 2 files changed +35
-1
lines changed Expand file tree Collapse file tree 2 files changed +35
-1
lines changed Original file line number Diff line number Diff line change @@ -1529,15 +1529,21 @@ PHP_METHOD(sqlite3result, columnName)
1529
1529
php_sqlite3_result * result_obj ;
1530
1530
zval * object = getThis ();
1531
1531
long column = 0 ;
1532
+ char * column_name ;
1532
1533
result_obj = (php_sqlite3_result * )zend_object_store_get_object (object TSRMLS_CC );
1533
1534
1534
1535
SQLITE3_CHECK_INITIALIZED (result_obj -> db_obj , result_obj -> stmt_obj -> initialised , SQLite3Result )
1535
1536
1536
1537
if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "l" , & column ) == FAILURE ) {
1537
1538
return ;
1538
1539
}
1540
+ column_name = (char * ) sqlite3_column_name (result_obj -> stmt_obj -> stmt , column );
1539
1541
1540
- RETVAL_STRING ((char * )sqlite3_column_name (result_obj -> stmt_obj -> stmt , column ), 1 );
1542
+ if (column_name == NULL ) {
1543
+ RETURN_FALSE ;
1544
+ }
1545
+
1546
+ RETVAL_STRING (column_name , 1 );
1541
1547
}
1542
1548
/* }}} */
1543
1549
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ Bug #53463 (sqlite3 columnName() segfaults on bad column_number)
3
+ --FILE--
4
+ <?php
5
+
6
+ $ db = new SQLite3 (':memory: ' );
7
+
8
+ $ db ->exec ('CREATE TABLE test (whatever INTEGER) ' );
9
+ $ db ->exec ('INSERT INTO test (whatever) VALUES (1) ' );
10
+
11
+ $ result = $ db ->query ('SELECT * FROM test ' );
12
+ while ($ row = $ result ->fetchArray (SQLITE3_NUM )) {
13
+ var_dump ($ result ->columnName (0 )); // string(8) "whatever"
14
+
15
+ // Seems returning false will be most appropriate.
16
+ var_dump ($ result ->columnName (3 )); // Segmentation fault
17
+ }
18
+
19
+ $ result ->finalize ();
20
+ $ db ->close ();
21
+
22
+ echo "Done \n" ;
23
+
24
+ ?>
25
+ --EXPECT--
26
+ string(8) "whatever"
27
+ bool(false)
28
+ Done
You can’t perform that action at this time.
0 commit comments