@@ -789,7 +789,6 @@ static bool do_fetch(pdo_stmt_t *stmt, zval *return_value, enum pdo_fetch_type h
789
789
bool failed = pdo_call_fetch_object_constructor (ce -> constructor , ctor_arguments , return_value );
790
790
if (UNEXPECTED (failed )) {
791
791
zval_ptr_dtor (return_value );
792
- RETVAL_FALSE ;
793
792
return false;
794
793
}
795
794
}
@@ -807,9 +806,6 @@ static bool do_fetch(pdo_stmt_t *stmt, zval *return_value, enum pdo_fetch_type h
807
806
808
807
ZVAL_OBJ_COPY (return_value , stmt -> fetch .into );
809
808
810
- if (Z_OBJ_P (return_value )-> ce == ZEND_STANDARD_CLASS_DEF_PTR ) {
811
- how = PDO_FETCH_OBJ ;
812
- }
813
809
/* We want the behaviour of fetching into an object to be called from the global scope rather
814
810
* than the object scope */
815
811
ce = NULL ;
@@ -850,6 +846,7 @@ static bool do_fetch(pdo_stmt_t *stmt, zval *return_value, enum pdo_fetch_type h
850
846
zval_ptr_dtor (& unserialization_string );
851
847
if (unserialize_res == FAILURE ) {
852
848
pdo_raise_impl_error (stmt -> dbh , stmt , "HY000" , "cannot unserialize class" );
849
+ zval_ptr_dtor (return_value );
853
850
return false;
854
851
}
855
852
column_index_to_fetch ++ ;
@@ -929,6 +926,7 @@ static bool do_fetch(pdo_stmt_t *stmt, zval *return_value, enum pdo_fetch_type h
929
926
if (how == PDO_FETCH_CLASS && ce -> constructor && !(flags & (PDO_FETCH_PROPS_LATE | PDO_FETCH_SERIALIZE ))) {
930
927
bool failed = pdo_call_fetch_object_constructor (ce -> constructor , ctor_arguments , return_value );
931
928
if (UNEXPECTED (failed )) {
929
+ zval_ptr_dtor (return_value );
932
930
return false;
933
931
}
934
932
} else if (how == PDO_FETCH_FUNC ) {
@@ -1036,7 +1034,6 @@ PHP_METHOD(PDOStatement, fetch)
1036
1034
return ;
1037
1035
}
1038
1036
if (!do_fetch (stmt , return_value , how , ori , off , NULL )) {
1039
- zval_ptr_dtor (return_value );
1040
1037
PDO_HANDLE_STMT_ERR ();
1041
1038
RETURN_FALSE ;
1042
1039
}
@@ -1074,7 +1071,6 @@ PHP_METHOD(PDOStatement, fetchObject)
1074
1071
stmt -> fetch .cls .ctor_args = ctor_args ;
1075
1072
1076
1073
if (!do_fetch (stmt , return_value , PDO_FETCH_CLASS , PDO_FETCH_ORI_NEXT , /* offset */ 0 , NULL )) {
1077
- zval_ptr_dtor (return_value );
1078
1074
PDO_HANDLE_STMT_ERR ();
1079
1075
RETVAL_FALSE ;
1080
1076
}
@@ -1247,14 +1243,8 @@ PHP_METHOD(PDOStatement, fetchAll)
1247
1243
1248
1244
if (fetch_mode == PDO_FETCH_KEY_PAIR ) {
1249
1245
while (pdo_do_key_pair_fetch (stmt , PDO_FETCH_ORI_NEXT , /* offset */ 0 , Z_ARRVAL_P (return_value )));
1250
- /* Inline PDO_HANDLE_STMT_ERR(); as we need to free the return value */
1251
- if (UNEXPECTED (EG (exception ) || strcmp (stmt -> error_code , PDO_ERR_NONE ) != 0 )) {
1252
- zval_ptr_dtor (return_value );
1253
- if (strcmp (stmt -> error_code , PDO_ERR_NONE ) != 0 ) {
1254
- pdo_handle_error (stmt -> dbh , stmt );
1255
- }
1256
- RETURN_EMPTY_ARRAY ();
1257
- }
1246
+ PDO_HANDLE_STMT_ERR ();
1247
+ return ;
1258
1248
}
1259
1249
1260
1250
// Need to handle the "broken" PDO_FETCH_GROUP|PDO_FETCH_UNIQUE fetch case
@@ -1288,7 +1278,6 @@ PHP_METHOD(PDOStatement, fetchAll)
1288
1278
1289
1279
/* Inline PDO_HANDLE_STMT_ERR(); as we need to free the return value */
1290
1280
if (UNEXPECTED (EG (exception ) || strcmp (stmt -> error_code , PDO_ERR_NONE ) != 0 )) {
1291
- zval_ptr_dtor (& data );
1292
1281
zval_ptr_dtor (return_value );
1293
1282
if (strcmp (stmt -> error_code , PDO_ERR_NONE ) != 0 ) {
1294
1283
pdo_handle_error (stmt -> dbh , stmt );
0 commit comments