@@ -964,41 +964,20 @@ static void php_snmp_internal(INTERNAL_FUNCTION_PARAMETERS, int st,
964
964
static int php_snmp_parse_oid (zval * object , int st , struct objid_query * objid_query , zval * oid , zval * type , zval * value )
965
965
{
966
966
char * pptr ;
967
- HashPosition pos_oid , pos_type , pos_value ;
967
+ uint32_t idx_type = 0 , idx_value = 0 ;
968
968
zval * tmp_oid , * tmp_type , * tmp_value ;
969
969
970
970
if (Z_TYPE_P (oid ) != IS_ARRAY ) {
971
- /*
972
- if (Z_ISREF_PP(oid)) {
973
- SEPARATE_ZVAL(oid);
974
- }
975
- */
976
971
convert_to_string_ex (oid );
977
- } else if (Z_TYPE_P (oid ) == IS_ARRAY ) {
978
- zend_hash_internal_pointer_reset_ex (Z_ARRVAL_P (oid ), & pos_oid );
979
972
}
980
973
981
974
if (st & SNMP_CMD_SET ) {
982
975
if (Z_TYPE_P (type ) != IS_ARRAY ) {
983
- /*
984
- if (Z_ISREF_PP(type)) {
985
- SEPARATE_ZVAL(type);
986
- }
987
- */
988
976
convert_to_string_ex (type );
989
- } else if (Z_TYPE_P (type ) == IS_ARRAY ) {
990
- zend_hash_internal_pointer_reset_ex (Z_ARRVAL_P (type ), & pos_type );
991
977
}
992
978
993
979
if (Z_TYPE_P (value ) != IS_ARRAY ) {
994
- /*
995
- if (Z_ISREF_PP(value)) {
996
- SEPARATE_ZVAL(value);
997
- }
998
- */
999
980
convert_to_string_ex (value );
1000
- } else if (Z_TYPE_P (value ) == IS_ARRAY ) {
1001
- zend_hash_internal_pointer_reset_ex (Z_ARRVAL_P (value ), & pos_value );
1002
981
}
1003
982
}
1004
983
@@ -1041,18 +1020,22 @@ static int php_snmp_parse_oid(zval *object, int st, struct objid_query *objid_qu
1041
1020
return FALSE;
1042
1021
}
1043
1022
objid_query -> array_output = ( (st & SNMP_CMD_SET ) ? FALSE : TRUE );
1044
- for (zend_hash_internal_pointer_reset_ex (Z_ARRVAL_P (oid ), & pos_oid );
1045
- (tmp_oid = zend_hash_get_current_data_ex (Z_ARRVAL_P (oid ), & pos_oid )) != NULL ;
1046
- zend_hash_move_forward_ex (Z_ARRVAL_P (oid ), & pos_oid ) ) {
1047
-
1023
+ ZEND_HASH_FOREACH_VAL (Z_ARRVAL_P (oid ), tmp_oid ) {
1048
1024
convert_to_string_ex (tmp_oid );
1049
1025
objid_query -> vars [objid_query -> count ].oid = Z_STRVAL_P (tmp_oid );
1050
1026
if (st & SNMP_CMD_SET ) {
1051
1027
if (Z_TYPE_P (type ) == IS_STRING ) {
1052
1028
pptr = Z_STRVAL_P (type );
1053
1029
objid_query -> vars [objid_query -> count ].type = * pptr ;
1054
1030
} else if (Z_TYPE_P (type ) == IS_ARRAY ) {
1055
- if ((tmp_type = zend_hash_get_current_data_ex (Z_ARRVAL_P (type ), & pos_type )) != NULL ) {
1031
+ while (idx_type < Z_ARRVAL_P (type )-> nNumUsed ) {
1032
+ tmp_type = & Z_ARRVAL_P (type )-> arData [idx_type ].val ;
1033
+ if (Z_TYPE_P (tmp_type ) != IS_UNDEF ) {
1034
+ break ;
1035
+ }
1036
+ idx_type ++ ;
1037
+ }
1038
+ if (idx_type < Z_ARRVAL_P (type )-> nNumUsed ) {
1056
1039
convert_to_string_ex (tmp_type );
1057
1040
if (Z_STRLEN_P (tmp_type ) != 1 ) {
1058
1041
php_error_docref (NULL , E_WARNING , "'%s': bogus type '%s', should be single char, got %u" , Z_STRVAL_P (tmp_oid ), Z_STRVAL_P (tmp_type ), Z_STRLEN_P (tmp_type ));
@@ -1061,7 +1044,7 @@ static int php_snmp_parse_oid(zval *object, int st, struct objid_query *objid_qu
1061
1044
}
1062
1045
pptr = Z_STRVAL_P (tmp_type );
1063
1046
objid_query -> vars [objid_query -> count ].type = * pptr ;
1064
- zend_hash_move_forward_ex ( Z_ARRVAL_P ( type ), & pos_type ) ;
1047
+ idx_type ++ ;
1065
1048
} else {
1066
1049
php_error_docref (NULL , E_WARNING , "'%s': no type set" , Z_STRVAL_P (tmp_oid ));
1067
1050
efree (objid_query -> vars );
@@ -1072,10 +1055,17 @@ static int php_snmp_parse_oid(zval *object, int st, struct objid_query *objid_qu
1072
1055
if (Z_TYPE_P (value ) == IS_STRING ) {
1073
1056
objid_query -> vars [objid_query -> count ].value = Z_STRVAL_P (value );
1074
1057
} else if (Z_TYPE_P (value ) == IS_ARRAY ) {
1075
- if ((tmp_value = zend_hash_get_current_data_ex (Z_ARRVAL_P (value ), & pos_value )) != NULL ) {
1058
+ while (idx_value < Z_ARRVAL_P (value )-> nNumUsed ) {
1059
+ tmp_value = & Z_ARRVAL_P (value )-> arData [idx_value ].val ;
1060
+ if (Z_TYPE_P (tmp_value ) != IS_UNDEF ) {
1061
+ break ;
1062
+ }
1063
+ idx_value ++ ;
1064
+ }
1065
+ if (idx_value < Z_ARRVAL_P (value )-> nNumUsed ) {
1076
1066
convert_to_string_ex (tmp_value );
1077
1067
objid_query -> vars [objid_query -> count ].value = Z_STRVAL_P (tmp_value );
1078
- zend_hash_move_forward_ex ( Z_ARRVAL_P ( value ), & pos_value ) ;
1068
+ idx_value ++ ;
1079
1069
} else {
1080
1070
php_error_docref (NULL , E_WARNING , "'%s': no value set" , Z_STRVAL_P (tmp_oid ));
1081
1071
efree (objid_query -> vars );
@@ -1084,7 +1074,7 @@ static int php_snmp_parse_oid(zval *object, int st, struct objid_query *objid_qu
1084
1074
}
1085
1075
}
1086
1076
objid_query -> count ++ ;
1087
- }
1077
+ } ZEND_HASH_FOREACH_END ();
1088
1078
}
1089
1079
1090
1080
/* now parse all OIDs */
0 commit comments