@@ -2704,7 +2704,9 @@ PDOStatementData::PDOStatementData() : m_rowIndex(-1) {
2704
2704
}
2705
2705
2706
2706
PDOStatementData::~PDOStatementData () {
2707
- m_stmt.reset ();
2707
+ if (m_stmt.get () != nullptr ) {
2708
+ m_stmt.reset ();
2709
+ }
2708
2710
}
2709
2711
2710
2712
static Variant HHVM_METHOD (PDOStatement, execute,
@@ -2713,6 +2715,11 @@ static Variant HHVM_METHOD(PDOStatement, execute,
2713
2715
auto params = paramsV.isNull () ? null_array : paramsV.toArray ();
2714
2716
2715
2717
SYNC_VM_REGS_SCOPED ();
2718
+
2719
+ if (data->m_stmt .get () == nullptr ) {
2720
+ return init_null_variant;
2721
+ }
2722
+
2716
2723
strcpy (data->m_stmt ->error_code , PDO_ERR_NONE);
2717
2724
2718
2725
if (!params.empty ()) {
@@ -2792,6 +2799,11 @@ static Variant HHVM_METHOD(PDOStatement, fetch, int64_t how = 0,
2792
2799
auto data = Native::data<PDOStatementData>(this_);
2793
2800
2794
2801
SYNC_VM_REGS_SCOPED ();
2802
+
2803
+ if (data->m_stmt .get () == nullptr ) {
2804
+ return false ;
2805
+ }
2806
+
2795
2807
strcpy (data->m_stmt ->error_code , PDO_ERR_NONE);
2796
2808
if (!pdo_stmt_verify_mode (data->m_stmt , how, false )) {
2797
2809
return false ;
@@ -2810,6 +2822,9 @@ static Variant HHVM_METHOD(PDOStatement, fetchobject,
2810
2822
const String& class_name /* = null_string */ ,
2811
2823
const Variant& ctor_args /* = null */ ) {
2812
2824
auto data = Native::data<PDOStatementData>(this_);
2825
+ if (data->m_stmt .get () == nullptr ) {
2826
+ return false ;
2827
+ }
2813
2828
2814
2829
strcpy (data->m_stmt ->error_code , PDO_ERR_NONE);
2815
2830
if (!pdo_stmt_verify_mode (data->m_stmt , PDO_FETCH_CLASS, false )) {
@@ -2856,6 +2871,9 @@ static Variant HHVM_METHOD(PDOStatement, fetchobject,
2856
2871
static Variant HHVM_METHOD (PDOStatement, fetchcolumn,
2857
2872
int64_t column_numner /* = 0 */ ) {
2858
2873
auto data = Native::data<PDOStatementData>(this_);
2874
+ if (data->m_stmt .get () == nullptr ) {
2875
+ return false ;
2876
+ }
2859
2877
2860
2878
strcpy (data->m_stmt ->error_code , PDO_ERR_NONE);
2861
2879
if (!do_fetch_common (data->m_stmt , PDO_FETCH_ORI_NEXT, 0 , true )) {
@@ -2871,6 +2889,9 @@ static Variant HHVM_METHOD(PDOStatement, fetchall, int64_t how /* = 0 */,
2871
2889
const Variant& class_name /* = null */ ,
2872
2890
const Variant& ctor_args /* = null */ ) {
2873
2891
auto self = Native::data<PDOStatementData>(this_);
2892
+ if (self->m_stmt .get () == nullptr ) {
2893
+ return false ;
2894
+ }
2874
2895
2875
2896
if (!pdo_stmt_verify_mode (self->m_stmt , how, true )) {
2876
2897
return false ;
@@ -2994,11 +3015,13 @@ static Variant HHVM_METHOD(PDOStatement, fetchall, int64_t how /* = 0 */,
2994
3015
return return_value;
2995
3016
}
2996
3017
2997
-
2998
3018
static bool HHVM_METHOD (PDOStatement, bindvalue, const Variant& paramno,
2999
3019
const Variant& param,
3000
3020
int64_t type /* = q_PDO$$PARAM_STR */ ) {
3001
3021
auto data = Native::data<PDOStatementData>(this_);
3022
+ if (data->m_stmt .get () == nullptr ) {
3023
+ return false ;
3024
+ }
3002
3025
3003
3026
return register_bound_param (paramno, param, type, 0 ,
3004
3027
uninit_null (), data->m_stmt , true );
@@ -3009,6 +3032,9 @@ static bool HHVM_METHOD(PDOStatement, bindparam, const Variant& paramno,
3009
3032
int64_t max_value_len /* = 0 */ ,
3010
3033
const Variant& driver_params /* = null */ ) {
3011
3034
auto data = Native::data<PDOStatementData>(this_);
3035
+ if (data->m_stmt .get () == nullptr ) {
3036
+ return false ;
3037
+ }
3012
3038
3013
3039
return register_bound_param (paramno, ref (param), type, max_value_len,
3014
3040
driver_params, data->m_stmt , true );
@@ -3019,20 +3045,28 @@ static bool HHVM_METHOD(PDOStatement, bindcolumn, const Variant& paramno,
3019
3045
int64_t max_value_len /* = 0 */ ,
3020
3046
const Variant& driver_params /* = null */ ) {
3021
3047
auto data = Native::data<PDOStatementData>(this_);
3048
+ if (data->m_stmt .get () == nullptr ) {
3049
+ return false ;
3050
+ }
3022
3051
3023
3052
return register_bound_param (paramno, ref (param), type, max_value_len,
3024
3053
driver_params, data->m_stmt , false );
3025
3054
}
3026
3055
3027
3056
static int64_t HHVM_METHOD (PDOStatement, rowcount) {
3028
3057
auto data = Native::data<PDOStatementData>(this_);
3058
+ if (data->m_stmt .get () == nullptr ) {
3059
+ return 0 ;
3060
+ }
3029
3061
3030
3062
return data->m_stmt ->row_count ;
3031
3063
}
3032
3064
3033
3065
static Variant HHVM_METHOD (PDOStatement, errorcode) {
3034
3066
auto data = Native::data<PDOStatementData>(this_);
3035
-
3067
+ if (data->m_stmt .get () == nullptr ) {
3068
+ return false ;
3069
+ }
3036
3070
if (data->m_stmt ->error_code [0 ] == ' \0 ' ) {
3037
3071
return init_null ();
3038
3072
}
@@ -3041,6 +3075,9 @@ static Variant HHVM_METHOD(PDOStatement, errorcode) {
3041
3075
3042
3076
static Array HHVM_METHOD (PDOStatement, errorinfo) {
3043
3077
auto data = Native::data<PDOStatementData>(this_);
3078
+ if (data->m_stmt .get () == nullptr ) {
3079
+ return null_array;
3080
+ }
3044
3081
3045
3082
Array ret;
3046
3083
ret.append (String (data->m_stmt ->error_code , CopyString));
@@ -3063,6 +3100,9 @@ static Array HHVM_METHOD(PDOStatement, errorinfo) {
3063
3100
static Variant HHVM_METHOD (PDOStatement, setattribute, int64_t attribute,
3064
3101
const Variant& value) {
3065
3102
auto data = Native::data<PDOStatementData>(this_);
3103
+ if (data->m_stmt .get () == nullptr ) {
3104
+ return false ;
3105
+ }
3066
3106
3067
3107
if (!data->m_stmt ->support (PDOStatement::MethodSetAttribute)) {
3068
3108
pdo_raise_impl_error (data->m_stmt ->dbh , data->m_stmt , " IM001" ,
@@ -3080,6 +3120,9 @@ static Variant HHVM_METHOD(PDOStatement, setattribute, int64_t attribute,
3080
3120
3081
3121
static Variant HHVM_METHOD (PDOStatement, getattribute, int64_t attribute) {
3082
3122
auto data = Native::data<PDOStatementData>(this_);
3123
+ if (data->m_stmt .get () == nullptr ) {
3124
+ return false ;
3125
+ }
3083
3126
3084
3127
Variant ret;
3085
3128
if (!data->m_stmt ->support (PDOStatement::MethodGetAttribute)) {
@@ -3112,6 +3155,9 @@ static Variant HHVM_METHOD(PDOStatement, getattribute, int64_t attribute) {
3112
3155
3113
3156
static int64_t HHVM_METHOD (PDOStatement, columncount) {
3114
3157
auto data = Native::data<PDOStatementData>(this_);
3158
+ if (data->m_stmt .get () == nullptr ) {
3159
+ return 0 ;
3160
+ }
3115
3161
3116
3162
return data->m_stmt ->column_count ;
3117
3163
}
@@ -3124,6 +3170,9 @@ const StaticString
3124
3170
3125
3171
static Variant HHVM_METHOD (PDOStatement, getcolumnmeta, int64_t column) {
3126
3172
auto data = Native::data<PDOStatementData>(this_);
3173
+ if (data->m_stmt .get () == nullptr ) {
3174
+ return false ;
3175
+ }
3127
3176
3128
3177
if (column < 0 ) {
3129
3178
pdo_raise_impl_error (data->m_stmt ->dbh , data->m_stmt , " 42P10" ,
@@ -3160,13 +3209,19 @@ static Variant HHVM_METHOD(PDOStatement, getcolumnmeta, int64_t column) {
3160
3209
static bool HHVM_METHOD (PDOStatement, setfetchmode,
3161
3210
int64_t mode, const Array& _argv /* = null_array */ ) {
3162
3211
auto data = Native::data<PDOStatementData>(this_);
3212
+ if (data->m_stmt .get () == nullptr ) {
3213
+ return false ;
3214
+ }
3163
3215
int argc = _argv.size () + 1 ;
3164
3216
3165
3217
return pdo_stmt_set_fetch_mode (data->m_stmt , argc, mode, _argv);
3166
3218
}
3167
3219
3168
3220
static bool HHVM_METHOD (PDOStatement, nextrowset) {
3169
3221
auto data = Native::data<PDOStatementData>(this_);
3222
+ if (data->m_stmt .get () == nullptr ) {
3223
+ return false ;
3224
+ }
3170
3225
3171
3226
if (!data->m_stmt ->support (PDOStatement::MethodNextRowset)) {
3172
3227
pdo_raise_impl_error (data->m_stmt ->dbh , data->m_stmt , " IM001" ,
@@ -3193,6 +3248,9 @@ static bool HHVM_METHOD(PDOStatement, nextrowset) {
3193
3248
3194
3249
static bool HHVM_METHOD (PDOStatement, closecursor) {
3195
3250
auto data = Native::data<PDOStatementData>(this_);
3251
+ if (data->m_stmt .get () == nullptr ) {
3252
+ return false ;
3253
+ }
3196
3254
3197
3255
if (!data->m_stmt ->support (PDOStatement::MethodCursorCloser)) {
3198
3256
/* emulate it by fetching and discarding rows */
@@ -3218,6 +3276,9 @@ static bool HHVM_METHOD(PDOStatement, closecursor) {
3218
3276
3219
3277
static Variant HHVM_METHOD (PDOStatement, debugdumpparams) {
3220
3278
auto data = Native::data<PDOStatementData>(this_);
3279
+ if (data->m_stmt .get () == nullptr ) {
3280
+ return false ;
3281
+ }
3221
3282
3222
3283
Resource resource = File::Open (" php://output" , " w" );
3223
3284
File *f = resource.getTyped <File>(true );
0 commit comments