Skip to content

Commit 030bb36

Browse files
committed
Declare SoapParam properties
1 parent 6cc4e32 commit 030bb36

File tree

3 files changed

+30
-16
lines changed

3 files changed

+30
-16
lines changed

ext/soap/soap.c

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,9 @@ static zend_class_entry* soap_header_class_entry;
162162
static zend_class_entry* soap_param_class_entry;
163163
zend_class_entry* soap_var_class_entry;
164164

165+
#define Z_PARAM_NAME_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 0)
166+
#define Z_PARAM_DATA_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 1)
167+
165168
ZEND_DECLARE_MODULE_GLOBALS(soap)
166169

167170
static void (*old_error_handler)(int, zend_string *, const uint32_t, zend_string *);
@@ -499,22 +502,21 @@ PHP_MINFO_FUNCTION(soap)
499502
PHP_METHOD(SoapParam, __construct)
500503
{
501504
zval *data;
502-
char *name;
503-
size_t name_length;
505+
zend_string *name;
504506
zval *this_ptr;
505507

506-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "zs", &data, &name, &name_length) == FAILURE) {
508+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "zS", &data, &name) == FAILURE) {
507509
RETURN_THROWS();
508510
}
509511

510-
if (name_length == 0) {
512+
if (ZSTR_LEN(name) == 0) {
511513
zend_argument_value_error(2, "cannot be empty");
512514
RETURN_THROWS();
513515
}
514516

515517
this_ptr = ZEND_THIS;
516-
add_property_stringl(this_ptr, "param_name", name, name_length);
517-
add_property_zval(this_ptr, "param_data", data);
518+
ZVAL_STR_COPY(Z_PARAM_NAME_P(this_ptr), name);
519+
ZVAL_COPY(Z_PARAM_DATA_P(this_ptr), data);
518520
}
519521
/* }}} */
520522

@@ -4064,15 +4066,12 @@ static xmlNodePtr serialize_parameter(sdlParamPtr param, zval *param_val, int in
40644066
xmlNodePtr xmlParam;
40654067
char paramNameBuf[10];
40664068

4067-
if (param_val &&
4068-
Z_TYPE_P(param_val) == IS_OBJECT &&
4069-
Z_OBJCE_P(param_val) == soap_param_class_entry) {
4070-
zval *param_name;
4071-
zval *param_data;
4072-
4073-
if ((param_name = zend_hash_str_find(Z_OBJPROP_P(param_val), "param_name", sizeof("param_name")-1)) != NULL &&
4074-
Z_TYPE_P(param_name) == IS_STRING &&
4075-
(param_data = zend_hash_str_find(Z_OBJPROP_P(param_val), "param_data", sizeof("param_data")-1)) != NULL) {
4069+
if (param_val && Z_TYPE_P(param_val) == IS_OBJECT
4070+
&& Z_OBJCE_P(param_val) == soap_param_class_entry) {
4071+
zval *param_name = Z_PARAM_NAME_P(param_val);
4072+
zval *param_data = Z_PARAM_DATA_P(param_val);
4073+
ZVAL_DEREF(param_name);
4074+
if (Z_TYPE_P(param_name) == IS_STRING && Z_TYPE_P(param_data) != IS_UNDEF) {
40764075
param_val = param_data;
40774076
name = Z_STRVAL_P(param_name);
40784077
}

ext/soap/soap.stub.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ function is_soap_fault(mixed $object): bool {}
88

99
class SoapParam
1010
{
11+
public string $param_name;
12+
public mixed $param_data;
13+
1114
public function __construct(mixed $data, string $name) {}
1215
}
1316

ext/soap/soap_arginfo.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: c72f989c179f1bc136fe008c78ac3605efe55141 */
2+
* Stub hash: a5baf303718efbc6fa5700de62fe8f33e6be0874 */
33

44
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_use_soap_error_handler, 0, 0, _IS_BOOL, 0)
55
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enable, _IS_BOOL, 0, "true")
@@ -240,6 +240,18 @@ static zend_class_entry *register_class_SoapParam(void)
240240
INIT_CLASS_ENTRY(ce, "SoapParam", class_SoapParam_methods);
241241
class_entry = zend_register_internal_class_ex(&ce, NULL);
242242

243+
zval property_param_name_default_value;
244+
ZVAL_UNDEF(&property_param_name_default_value);
245+
zend_string *property_param_name_name = zend_string_init("param_name", sizeof("param_name") - 1, 1);
246+
zend_declare_typed_property(class_entry, property_param_name_name, &property_param_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING));
247+
zend_string_release(property_param_name_name);
248+
249+
zval property_param_data_default_value;
250+
ZVAL_UNDEF(&property_param_data_default_value);
251+
zend_string *property_param_data_name = zend_string_init("param_data", sizeof("param_data") - 1, 1);
252+
zend_declare_typed_property(class_entry, property_param_data_name, &property_param_data_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_ANY));
253+
zend_string_release(property_param_data_name);
254+
243255
return class_entry;
244256
}
245257

0 commit comments

Comments
 (0)