@@ -40,7 +40,6 @@ static bool pdo_dbh_attribute_set(pdo_dbh_t *dbh, zend_long attr, zval *value, u
40
40
void pdo_throw_exception (unsigned int driver_errcode , char * driver_errmsg , pdo_error_type * pdo_error )
41
41
{
42
42
zval error_info ,pdo_exception ;
43
- char * pdo_exception_message ;
44
43
45
44
object_init_ex (& pdo_exception , php_pdo_get_exception ());
46
45
array_init (& error_info );
@@ -49,17 +48,17 @@ void pdo_throw_exception(unsigned int driver_errcode, char *driver_errmsg, pdo_e
49
48
add_next_index_long (& error_info , driver_errcode );
50
49
add_next_index_string (& error_info , driver_errmsg );
51
50
52
- spprintf ( & pdo_exception_message , 0 ,"SQLSTATE[%s] [%d] %s" ,* pdo_error , driver_errcode , driver_errmsg );
51
+ zend_string * pdo_exception_message = zend_strpprintf ( 0 ,"SQLSTATE[%s] [%d] %s" ,* pdo_error , driver_errcode , driver_errmsg );
53
52
zend_update_property (php_pdo_get_exception (), Z_OBJ (pdo_exception ), "errorInfo" , sizeof ("errorInfo" )- 1 , & error_info );
54
53
zend_update_property_long (php_pdo_get_exception (), Z_OBJ (pdo_exception ), "code" , sizeof ("code" )- 1 , driver_errcode );
55
- zend_update_property_string (
54
+ zend_update_property_str (
56
55
php_pdo_get_exception (),
57
56
Z_OBJ (pdo_exception ),
58
57
"message" ,
59
58
sizeof ("message" )- 1 ,
60
59
pdo_exception_message
61
60
);
62
- efree (pdo_exception_message );
61
+ zend_string_release_ex (pdo_exception_message , false );
63
62
zval_ptr_dtor (& error_info );
64
63
zend_throw_exception_object (& pdo_exception );
65
64
}
@@ -74,7 +73,6 @@ PDO_API bool php_pdo_stmt_valid_db_obj_handle(const pdo_stmt_t *stmt)
74
73
void pdo_raise_impl_error (pdo_dbh_t * dbh , pdo_stmt_t * stmt , pdo_error_type sqlstate , const char * supp ) /* {{{ */
75
74
{
76
75
pdo_error_type * pdo_err = & dbh -> error_code ;
77
- char * message = NULL ;
78
76
const char * msg ;
79
77
80
78
if (dbh -> error_mode == PDO_ERRMODE_SILENT ) {
@@ -98,21 +96,22 @@ void pdo_raise_impl_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, pdo_error_type sqlst
98
96
msg = "<<Unknown error>>" ;
99
97
}
100
98
99
+ zend_string * message = NULL ;
101
100
if (supp ) {
102
- spprintf ( & message , 0 , "SQLSTATE[%s]: %s: %s" , * pdo_err , msg , supp );
101
+ message = zend_strpprintf ( 0 , "SQLSTATE[%s]: %s: %s" , * pdo_err , msg , supp );
103
102
} else {
104
- spprintf ( & message , 0 , "SQLSTATE[%s]: %s" , * pdo_err , msg );
103
+ message = zend_strpprintf ( 0 , "SQLSTATE[%s]: %s" , * pdo_err , msg );
105
104
}
106
105
107
106
if (dbh -> error_mode != PDO_ERRMODE_EXCEPTION ) {
108
- php_error_docref (NULL , E_WARNING , "%s" , message );
107
+ php_error_docref (NULL , E_WARNING , "%s" , ZSTR_VAL ( message ) );
109
108
} else {
110
109
zval ex , info ;
111
110
zend_class_entry * pdo_ex = php_pdo_get_exception ();
112
111
113
112
object_init_ex (& ex , pdo_ex );
114
113
115
- zend_update_property_string (zend_ce_exception , Z_OBJ (ex ), "message" , sizeof ("message" )- 1 , message );
114
+ zend_update_property_str (zend_ce_exception , Z_OBJ (ex ), "message" , sizeof ("message" )- 1 , message );
116
115
zend_update_property_string (zend_ce_exception , Z_OBJ (ex ), "code" , sizeof ("code" )- 1 , * pdo_err );
117
116
118
117
array_init (& info );
@@ -125,9 +124,7 @@ void pdo_raise_impl_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, pdo_error_type sqlst
125
124
zend_throw_exception_object (& ex );
126
125
}
127
126
128
- if (message ) {
129
- efree (message );
130
- }
127
+ zend_string_release_ex (message , false);
131
128
}
132
129
/* }}} */
133
130
@@ -386,8 +383,7 @@ PDO_API void php_pdo_internal_construct_driver(INTERNAL_FUNCTION_PARAMETERS, zen
386
383
387
384
/* is this supposed to be a persistent connection ? */
388
385
if (options ) {
389
- int plen = 0 ;
390
- char * hashkey = NULL ;
386
+ zend_string * hash_key = NULL ;
391
387
zend_resource * le ;
392
388
pdo_dbh_t * pdbh = NULL ;
393
389
zval * v ;
@@ -396,22 +392,22 @@ PDO_API void php_pdo_internal_construct_driver(INTERNAL_FUNCTION_PARAMETERS, zen
396
392
if (Z_TYPE_P (v ) == IS_STRING &&
397
393
!is_numeric_string (Z_STRVAL_P (v ), Z_STRLEN_P (v ), NULL , NULL , 0 ) && Z_STRLEN_P (v ) > 0 ) {
398
394
/* user specified key */
399
- plen = spprintf ( & hashkey , 0 , "PDO:DBH:DSN=%s:%s:%s:%s" , data_source ,
395
+ hash_key = zend_strpprintf ( 0 , "PDO:DBH:DSN=%s:%s:%s:%s" , data_source ,
400
396
username ? username : "" ,
401
397
password ? password : "" ,
402
398
Z_STRVAL_P (v ));
403
399
is_persistent = 1 ;
404
400
} else {
405
401
is_persistent = zval_get_long (v ) ? 1 : 0 ;
406
- plen = spprintf ( & hashkey , 0 , "PDO:DBH:DSN=%s:%s:%s" , data_source ,
402
+ hash_key = zend_strpprintf ( 0 , "PDO:DBH:DSN=%s:%s:%s" , data_source ,
407
403
username ? username : "" ,
408
404
password ? password : "" );
409
405
}
410
406
}
411
407
412
408
if (is_persistent ) {
413
409
/* let's see if we have one cached.... */
414
- if ((le = zend_hash_str_find_ptr (& EG (persistent_list ), hashkey , plen )) != NULL ) {
410
+ if ((le = zend_hash_find_ptr (& EG (persistent_list ), hash_key )) != NULL ) {
415
411
if (le -> type == php_pdo_list_entry ()) {
416
412
pdbh = (pdo_dbh_t * )le -> ptr ;
417
413
@@ -433,9 +429,9 @@ PDO_API void php_pdo_internal_construct_driver(INTERNAL_FUNCTION_PARAMETERS, zen
433
429
434
430
pdbh -> refcount = 1 ;
435
431
pdbh -> is_persistent = 1 ;
436
- pdbh -> persistent_id = pemalloc (plen + 1 , 1 );
437
- memcpy ((char * )pdbh -> persistent_id , hashkey , plen + 1 );
438
- pdbh -> persistent_id_len = plen ;
432
+ pdbh -> persistent_id = pemalloc (ZSTR_LEN ( hash_key ) + 1 , true );
433
+ memcpy ((char * )pdbh -> persistent_id , ZSTR_VAL ( hash_key ), ZSTR_LEN ( hash_key ) + 1 );
434
+ pdbh -> persistent_id_len = ZSTR_LEN ( hash_key ) ;
439
435
pdbh -> def_stmt_ce = dbh -> def_stmt_ce ;
440
436
}
441
437
}
@@ -456,8 +452,8 @@ PDO_API void php_pdo_internal_construct_driver(INTERNAL_FUNCTION_PARAMETERS, zen
456
452
dbh = pdbh ;
457
453
}
458
454
459
- if (hashkey ) {
460
- efree ( hashkey );
455
+ if (hash_key ) {
456
+ zend_string_release_ex ( hash_key , false );
461
457
}
462
458
}
463
459
0 commit comments