@@ -905,8 +905,8 @@ void object_to_bson(zval *object, php_phongo_bson_flags_t flags, const char *key
905
905
tmp_ht = HASH_OF (obj_data );
906
906
#endif
907
907
908
- if (tmp_ht ) {
909
- ZEND_HASH_APPLY_COUNT (tmp_ht )++ ;
908
+ if (tmp_ht && ZEND_HASH_APPLY_PROTECTION ( tmp_ht ) ) {
909
+ ZEND_HASH_INC_APPLY_COUNT (tmp_ht );
910
910
}
911
911
912
912
/* Persistable objects must always be serialized as BSON documents;
@@ -940,8 +940,8 @@ void object_to_bson(zval *object, php_phongo_bson_flags_t flags, const char *key
940
940
bson_append_array_end (bson , & child );
941
941
}
942
942
943
- if (tmp_ht ) {
944
- ZEND_HASH_APPLY_COUNT (tmp_ht )-- ;
943
+ if (tmp_ht && ZEND_HASH_APPLY_PROTECTION ( tmp_ht ) ) {
944
+ ZEND_HASH_DEC_APPLY_COUNT (tmp_ht );
945
945
}
946
946
zval_ptr_dtor (& obj_data );
947
947
return ;
@@ -1014,12 +1014,22 @@ void object_to_bson(zval *object, php_phongo_bson_flags_t flags, const char *key
1014
1014
1015
1015
phongo_throw_exception (PHONGO_ERROR_UNEXPECTED_VALUE TSRMLS_CC , "Unexpected %s instance: %s" , ZSTR_VAL (php_phongo_type_ce -> name ), ZSTR_VAL (Z_OBJCE_P (object )-> name ));
1016
1016
return ;
1017
- }
1017
+ } else {
1018
+ HashTable * tmp_ht = HASH_OF (object );
1019
+
1020
+ if (tmp_ht && ZEND_HASH_APPLY_PROTECTION (tmp_ht )) {
1021
+ ZEND_HASH_INC_APPLY_COUNT (tmp_ht );
1022
+ }
1018
1023
1019
- mongoc_log (MONGOC_LOG_LEVEL_TRACE , MONGOC_LOG_DOMAIN , "encoding document" );
1020
- bson_append_document_begin (bson , key , key_len , & child );
1021
- phongo_zval_to_bson (object , flags , & child , NULL TSRMLS_CC );
1022
- bson_append_document_end (bson , & child );
1024
+ mongoc_log (MONGOC_LOG_LEVEL_TRACE , MONGOC_LOG_DOMAIN , "encoding document" );
1025
+ bson_append_document_begin (bson , key , key_len , & child );
1026
+ phongo_zval_to_bson (object , flags , & child , NULL TSRMLS_CC );
1027
+ bson_append_document_end (bson , & child );
1028
+
1029
+ if (tmp_ht && ZEND_HASH_APPLY_PROTECTION (tmp_ht )) {
1030
+ ZEND_HASH_DEC_APPLY_COUNT (tmp_ht );
1031
+ }
1032
+ }
1023
1033
}
1024
1034
1025
1035
static void phongo_bson_append (bson_t * bson , php_phongo_bson_flags_t flags , const char * key , long key_len , zval * entry TSRMLS_DC )
@@ -1067,16 +1077,16 @@ static void phongo_bson_append(bson_t *bson, php_phongo_bson_flags_t flags, cons
1067
1077
bson_t child ;
1068
1078
HashTable * tmp_ht = HASH_OF (entry );
1069
1079
1070
- if (tmp_ht ) {
1071
- ZEND_HASH_APPLY_COUNT (tmp_ht )++ ;
1080
+ if (tmp_ht && ZEND_HASH_APPLY_PROTECTION ( tmp_ht ) ) {
1081
+ ZEND_HASH_INC_APPLY_COUNT (tmp_ht );
1072
1082
}
1073
1083
1074
1084
bson_append_array_begin (bson , key , key_len , & child );
1075
1085
phongo_zval_to_bson (entry , flags , & child , NULL TSRMLS_CC );
1076
1086
bson_append_array_end (bson , & child );
1077
1087
1078
- if (tmp_ht ) {
1079
- ZEND_HASH_APPLY_COUNT (tmp_ht )-- ;
1088
+ if (tmp_ht && ZEND_HASH_APPLY_PROTECTION ( tmp_ht ) ) {
1089
+ ZEND_HASH_DEC_APPLY_COUNT (tmp_ht );
1080
1090
}
1081
1091
break ;
1082
1092
}
@@ -1231,7 +1241,7 @@ void phongo_zval_to_bson(zval *data, php_phongo_bson_flags_t flags, bson_t *bson
1231
1241
return ;
1232
1242
}
1233
1243
1234
- if (!ht_data || ZEND_HASH_APPLY_COUNT (ht_data ) > 1 ) {
1244
+ if (!ht_data || ZEND_HASH_GET_APPLY_COUNT (ht_data ) > 1 ) {
1235
1245
#if PHP_VERSION_ID >= 70000
1236
1246
if (Z_TYPE_P (data ) == IS_OBJECT && instanceof_function (Z_OBJCE_P (data ), php_phongo_serializable_ce TSRMLS_CC )) {
1237
1247
#endif
0 commit comments