Skip to content

Commit 17bb8bd

Browse files
committed
Initialize well known type values (protocolbuffers#6713)
* Initialize well known type values Also fixes protocolbuffers#6667 * Revert unwanted change
1 parent 3f323c5 commit 17bb8bd

File tree

4 files changed

+82
-61
lines changed

4 files changed

+82
-61
lines changed

php/ext/google/protobuf/message.c

+67-61
Original file line numberDiff line numberDiff line change
@@ -1770,19 +1770,19 @@ zend_class_entry* api_type;
17701770
// Init class entry.
17711771
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\Api",
17721772
Api, api)
1773-
zend_declare_property_null(api_type, "name", strlen("name"),
1774-
ZEND_ACC_PRIVATE TSRMLS_CC);
1773+
zend_declare_property_string(api_type, "name", strlen("name"), "",
1774+
ZEND_ACC_PRIVATE TSRMLS_CC);
17751775
zend_declare_property_null(api_type, "methods", strlen("methods"),
17761776
ZEND_ACC_PRIVATE TSRMLS_CC);
17771777
zend_declare_property_null(api_type, "options", strlen("options"),
17781778
ZEND_ACC_PRIVATE TSRMLS_CC);
1779-
zend_declare_property_null(api_type, "version", strlen("version"),
1780-
ZEND_ACC_PRIVATE TSRMLS_CC);
1779+
zend_declare_property_string(api_type, "version", strlen("version"), "",
1780+
ZEND_ACC_PRIVATE TSRMLS_CC);
17811781
zend_declare_property_null(api_type, "source_context", strlen("source_context"),
17821782
ZEND_ACC_PRIVATE TSRMLS_CC);
17831783
zend_declare_property_null(api_type, "mixins", strlen("mixins"),
17841784
ZEND_ACC_PRIVATE TSRMLS_CC);
1785-
zend_declare_property_null(api_type, "syntax", strlen("syntax"),
1785+
zend_declare_property_long(api_type, "syntax", strlen("syntax"), 0,
17861786
ZEND_ACC_PRIVATE TSRMLS_CC);
17871787
PHP_PROTO_INIT_SUBMSGCLASS_END
17881788

@@ -1816,7 +1816,7 @@ zend_class_entry* bool_value_type;
18161816
// Init class entry.
18171817
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\BoolValue",
18181818
BoolValue, bool_value)
1819-
zend_declare_property_null(bool_value_type, "value", strlen("value"),
1819+
zend_declare_property_bool(bool_value_type, "value", strlen("value"), 0,
18201820
ZEND_ACC_PRIVATE TSRMLS_CC);
18211821
PHP_PROTO_INIT_SUBMSGCLASS_END
18221822

@@ -1844,8 +1844,8 @@ zend_class_entry* bytes_value_type;
18441844
// Init class entry.
18451845
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\BytesValue",
18461846
BytesValue, bytes_value)
1847-
zend_declare_property_null(bytes_value_type, "value", strlen("value"),
1848-
ZEND_ACC_PRIVATE TSRMLS_CC);
1847+
zend_declare_property_string(bytes_value_type, "value", strlen("value"), "",
1848+
ZEND_ACC_PRIVATE TSRMLS_CC);
18491849
PHP_PROTO_INIT_SUBMSGCLASS_END
18501850

18511851
PHP_METHOD(BytesValue, __construct) {
@@ -1872,8 +1872,8 @@ zend_class_entry* double_value_type;
18721872
// Init class entry.
18731873
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\DoubleValue",
18741874
DoubleValue, double_value)
1875-
zend_declare_property_null(double_value_type, "value", strlen("value"),
1876-
ZEND_ACC_PRIVATE TSRMLS_CC);
1875+
zend_declare_property_double(double_value_type, "value", strlen("value"), 0,
1876+
ZEND_ACC_PRIVATE TSRMLS_CC);
18771877
PHP_PROTO_INIT_SUBMSGCLASS_END
18781878

18791879
PHP_METHOD(DoubleValue, __construct) {
@@ -1908,15 +1908,15 @@ zend_class_entry* enum_type;
19081908
// Init class entry.
19091909
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\Enum",
19101910
Enum, enum)
1911-
zend_declare_property_null(enum_type, "name", strlen("name"),
1912-
ZEND_ACC_PRIVATE TSRMLS_CC);
1911+
zend_declare_property_string(enum_type, "name", strlen("name"), "",
1912+
ZEND_ACC_PRIVATE TSRMLS_CC);
19131913
zend_declare_property_null(enum_type, "enumvalue", strlen("enumvalue"),
19141914
ZEND_ACC_PRIVATE TSRMLS_CC);
19151915
zend_declare_property_null(enum_type, "options", strlen("options"),
19161916
ZEND_ACC_PRIVATE TSRMLS_CC);
19171917
zend_declare_property_null(enum_type, "source_context", strlen("source_context"),
19181918
ZEND_ACC_PRIVATE TSRMLS_CC);
1919-
zend_declare_property_null(enum_type, "syntax", strlen("syntax"),
1919+
zend_declare_property_long(enum_type, "syntax", strlen("syntax"), 0,
19201920
ZEND_ACC_PRIVATE TSRMLS_CC);
19211921
PHP_PROTO_INIT_SUBMSGCLASS_END
19221922

@@ -1952,9 +1952,9 @@ zend_class_entry* enum_value_type;
19521952
// Init class entry.
19531953
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\EnumValue",
19541954
EnumValue, enum_value)
1955-
zend_declare_property_null(enum_value_type, "name", strlen("name"),
1956-
ZEND_ACC_PRIVATE TSRMLS_CC);
1957-
zend_declare_property_null(enum_value_type, "number", strlen("number"),
1955+
zend_declare_property_string(enum_value_type, "name", strlen("name"), "",
1956+
ZEND_ACC_PRIVATE TSRMLS_CC);
1957+
zend_declare_property_long(enum_value_type, "number", strlen("number"), 0,
19581958
ZEND_ACC_PRIVATE TSRMLS_CC);
19591959
zend_declare_property_null(enum_value_type, "options", strlen("options"),
19601960
ZEND_ACC_PRIVATE TSRMLS_CC);
@@ -2032,26 +2032,27 @@ zend_class_entry* field_type;
20322032
// Init class entry.
20332033
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\Field",
20342034
Field, field)
2035-
zend_declare_property_null(field_type, "kind", strlen("kind"),
2035+
zend_declare_property_long(field_type, "kind", strlen("kind"), 0,
20362036
ZEND_ACC_PRIVATE TSRMLS_CC);
2037-
zend_declare_property_null(field_type, "cardinality", strlen("cardinality"),
2037+
zend_declare_property_long(field_type, "cardinality", strlen("cardinality"),
2038+
0, ZEND_ACC_PRIVATE TSRMLS_CC);
2039+
zend_declare_property_long(field_type, "number", strlen("number"), 0,
20382040
ZEND_ACC_PRIVATE TSRMLS_CC);
2039-
zend_declare_property_null(field_type, "number", strlen("number"),
2040-
ZEND_ACC_PRIVATE TSRMLS_CC);
2041-
zend_declare_property_null(field_type, "name", strlen("name"),
2042-
ZEND_ACC_PRIVATE TSRMLS_CC);
2043-
zend_declare_property_null(field_type, "type_url", strlen("type_url"),
2044-
ZEND_ACC_PRIVATE TSRMLS_CC);
2045-
zend_declare_property_null(field_type, "oneof_index", strlen("oneof_index"),
2046-
ZEND_ACC_PRIVATE TSRMLS_CC);
2047-
zend_declare_property_null(field_type, "packed", strlen("packed"),
2041+
zend_declare_property_string(field_type, "name", strlen("name"), "",
2042+
ZEND_ACC_PRIVATE TSRMLS_CC);
2043+
zend_declare_property_string(field_type, "type_url", strlen("type_url"), "",
2044+
ZEND_ACC_PRIVATE TSRMLS_CC);
2045+
zend_declare_property_long(field_type, "oneof_index", strlen("oneof_index"),
2046+
0, ZEND_ACC_PRIVATE TSRMLS_CC);
2047+
zend_declare_property_bool(field_type, "packed", strlen("packed"), false,
20482048
ZEND_ACC_PRIVATE TSRMLS_CC);
20492049
zend_declare_property_null(field_type, "options", strlen("options"),
20502050
ZEND_ACC_PRIVATE TSRMLS_CC);
2051-
zend_declare_property_null(field_type, "json_name", strlen("json_name"),
2052-
ZEND_ACC_PRIVATE TSRMLS_CC);
2053-
zend_declare_property_null(field_type, "default_value", strlen("default_value"),
2054-
ZEND_ACC_PRIVATE TSRMLS_CC);
2051+
zend_declare_property_string(field_type, "json_name", strlen("json_name"),
2052+
"", ZEND_ACC_PRIVATE TSRMLS_CC);
2053+
zend_declare_property_string(field_type, "default_value",
2054+
strlen("default_value"), "",
2055+
ZEND_ACC_PRIVATE TSRMLS_CC);
20552056
PHP_PROTO_INIT_SUBMSGCLASS_END
20562057

20572058
PHP_METHOD(Field, __construct) {
@@ -2087,8 +2088,8 @@ zend_class_entry* float_value_type;
20872088
// Init class entry.
20882089
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\FloatValue",
20892090
FloatValue, float_value)
2090-
zend_declare_property_null(float_value_type, "value", strlen("value"),
2091-
ZEND_ACC_PRIVATE TSRMLS_CC);
2091+
zend_declare_property_double(float_value_type, "value", strlen("value"), 0,
2092+
ZEND_ACC_PRIVATE TSRMLS_CC);
20922093
PHP_PROTO_INIT_SUBMSGCLASS_END
20932094

20942095
PHP_METHOD(FloatValue, __construct) {
@@ -2138,7 +2139,7 @@ zend_class_entry* int32_value_type;
21382139
// Init class entry.
21392140
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\Int32Value",
21402141
Int32Value, int32_value)
2141-
zend_declare_property_null(int32_value_type, "value", strlen("value"),
2142+
zend_declare_property_long(int32_value_type, "value", strlen("value"), 0,
21422143
ZEND_ACC_PRIVATE TSRMLS_CC);
21432144
PHP_PROTO_INIT_SUBMSGCLASS_END
21442145

@@ -2166,7 +2167,7 @@ zend_class_entry* int64_value_type;
21662167
// Init class entry.
21672168
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\Int64Value",
21682169
Int64Value, int64_value)
2169-
zend_declare_property_null(int64_value_type, "value", strlen("value"),
2170+
zend_declare_property_long(int64_value_type, "value", strlen("value"), 0,
21702171
ZEND_ACC_PRIVATE TSRMLS_CC);
21712172
PHP_PROTO_INIT_SUBMSGCLASS_END
21722173

@@ -2234,19 +2235,23 @@ zend_class_entry* method_type;
22342235
// Init class entry.
22352236
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\Method",
22362237
Method, method)
2237-
zend_declare_property_null(method_type, "name", strlen("name"),
2238-
ZEND_ACC_PRIVATE TSRMLS_CC);
2239-
zend_declare_property_null(method_type, "request_type_url", strlen("request_type_url"),
2240-
ZEND_ACC_PRIVATE TSRMLS_CC);
2241-
zend_declare_property_null(method_type, "request_streaming", strlen("request_streaming"),
2238+
zend_declare_property_string(method_type, "name", strlen("name"), "",
2239+
ZEND_ACC_PRIVATE TSRMLS_CC);
2240+
zend_declare_property_string(method_type, "request_type_url",
2241+
strlen("request_type_url"), "",
2242+
ZEND_ACC_PRIVATE TSRMLS_CC);
2243+
zend_declare_property_bool(method_type, "request_streaming",
2244+
strlen("request_streaming"), 0,
22422245
ZEND_ACC_PRIVATE TSRMLS_CC);
2243-
zend_declare_property_null(method_type, "response_type_url", strlen("response_type_url"),
2244-
ZEND_ACC_PRIVATE TSRMLS_CC);
2245-
zend_declare_property_null(method_type, "response_streaming", strlen("response_streaming"),
2246+
zend_declare_property_string(method_type, "response_type_url",
2247+
strlen("response_type_url"), "",
2248+
ZEND_ACC_PRIVATE TSRMLS_CC);
2249+
zend_declare_property_bool(method_type, "response_streaming",
2250+
strlen("response_streaming"), 0,
22462251
ZEND_ACC_PRIVATE TSRMLS_CC);
22472252
zend_declare_property_null(method_type, "options", strlen("options"),
22482253
ZEND_ACC_PRIVATE TSRMLS_CC);
2249-
zend_declare_property_null(method_type, "syntax", strlen("syntax"),
2254+
zend_declare_property_long(method_type, "syntax", strlen("syntax"), 0,
22502255
ZEND_ACC_PRIVATE TSRMLS_CC);
22512256
PHP_PROTO_INIT_SUBMSGCLASS_END
22522257

@@ -2282,10 +2287,10 @@ zend_class_entry* mixin_type;
22822287
// Init class entry.
22832288
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\Mixin",
22842289
Mixin, mixin)
2285-
zend_declare_property_null(mixin_type, "name", strlen("name"),
2286-
ZEND_ACC_PRIVATE TSRMLS_CC);
2287-
zend_declare_property_null(mixin_type, "root", strlen("root"),
2288-
ZEND_ACC_PRIVATE TSRMLS_CC);
2290+
zend_declare_property_string(mixin_type, "name", strlen("name"), "",
2291+
ZEND_ACC_PRIVATE TSRMLS_CC);
2292+
zend_declare_property_string(mixin_type, "root", strlen("root"), "",
2293+
ZEND_ACC_PRIVATE TSRMLS_CC);
22892294
PHP_PROTO_INIT_SUBMSGCLASS_END
22902295

22912296
PHP_METHOD(Mixin, __construct) {
@@ -2315,8 +2320,8 @@ zend_class_entry* option_type;
23152320
// Init class entry.
23162321
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\Option",
23172322
Option, option)
2318-
zend_declare_property_null(option_type, "name", strlen("name"),
2319-
ZEND_ACC_PRIVATE TSRMLS_CC);
2323+
zend_declare_property_string(option_type, "name", strlen("name"), "",
2324+
ZEND_ACC_PRIVATE TSRMLS_CC);
23202325
zend_declare_property_null(option_type, "value", strlen("value"),
23212326
ZEND_ACC_PRIVATE TSRMLS_CC);
23222327
PHP_PROTO_INIT_SUBMSGCLASS_END
@@ -2346,8 +2351,9 @@ zend_class_entry* source_context_type;
23462351
// Init class entry.
23472352
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\SourceContext",
23482353
SourceContext, source_context)
2349-
zend_declare_property_null(source_context_type, "file_name", strlen("file_name"),
2350-
ZEND_ACC_PRIVATE TSRMLS_CC);
2354+
zend_declare_property_string(source_context_type, "file_name",
2355+
strlen("file_name"), "",
2356+
ZEND_ACC_PRIVATE TSRMLS_CC);
23512357
PHP_PROTO_INIT_SUBMSGCLASS_END
23522358

23532359
PHP_METHOD(SourceContext, __construct) {
@@ -2374,8 +2380,8 @@ zend_class_entry* string_value_type;
23742380
// Init class entry.
23752381
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\StringValue",
23762382
StringValue, string_value)
2377-
zend_declare_property_null(string_value_type, "value", strlen("value"),
2378-
ZEND_ACC_PRIVATE TSRMLS_CC);
2383+
zend_declare_property_string(string_value_type, "value", strlen("value"), "",
2384+
ZEND_ACC_PRIVATE TSRMLS_CC);
23792385
PHP_PROTO_INIT_SUBMSGCLASS_END
23802386

23812387
PHP_METHOD(StringValue, __construct) {
@@ -2440,17 +2446,17 @@ zend_class_entry* type_type;
24402446
// Init class entry.
24412447
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\Type",
24422448
Type, type)
2443-
zend_declare_property_null(type_type, "name", strlen("name"),
2444-
ZEND_ACC_PRIVATE TSRMLS_CC);
2449+
zend_declare_property_string(type_type, "name", strlen("name"), "",
2450+
ZEND_ACC_PRIVATE TSRMLS_CC);
24452451
zend_declare_property_null(type_type, "fields", strlen("fields"),
24462452
ZEND_ACC_PRIVATE TSRMLS_CC);
2447-
zend_declare_property_null(type_type, "oneofs", strlen("oneofs"),
2448-
ZEND_ACC_PRIVATE TSRMLS_CC);
2453+
zend_declare_property_string(type_type, "oneofs", strlen("oneofs"), "",
2454+
ZEND_ACC_PRIVATE TSRMLS_CC);
24492455
zend_declare_property_null(type_type, "options", strlen("options"),
24502456
ZEND_ACC_PRIVATE TSRMLS_CC);
24512457
zend_declare_property_null(type_type, "source_context", strlen("source_context"),
24522458
ZEND_ACC_PRIVATE TSRMLS_CC);
2453-
zend_declare_property_null(type_type, "syntax", strlen("syntax"),
2459+
zend_declare_property_long(type_type, "syntax", strlen("syntax"), 0,
24542460
ZEND_ACC_PRIVATE TSRMLS_CC);
24552461
PHP_PROTO_INIT_SUBMSGCLASS_END
24562462

@@ -2483,7 +2489,7 @@ zend_class_entry* u_int32_value_type;
24832489
// Init class entry.
24842490
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\UInt32Value",
24852491
UInt32Value, u_int32_value)
2486-
zend_declare_property_null(u_int32_value_type, "value", strlen("value"),
2492+
zend_declare_property_long(u_int32_value_type, "value", strlen("value"), 0,
24872493
ZEND_ACC_PRIVATE TSRMLS_CC);
24882494
PHP_PROTO_INIT_SUBMSGCLASS_END
24892495

@@ -2511,7 +2517,7 @@ zend_class_entry* u_int64_value_type;
25112517
// Init class entry.
25122518
PHP_PROTO_INIT_SUBMSGCLASS_START("Google\\Protobuf\\UInt64Value",
25132519
UInt64Value, u_int64_value)
2514-
zend_declare_property_null(u_int64_value_type, "value", strlen("value"),
2520+
zend_declare_property_long(u_int64_value_type, "value", strlen("value"), 0,
25152521
ZEND_ACC_PRIVATE TSRMLS_CC);
25162522
PHP_PROTO_INIT_SUBMSGCLASS_END
25172523

php/tests/encode_decode_test.php

+9
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
use Google\Protobuf\RepeatedField;
77
use Google\Protobuf\GPBType;
8+
use Foo\TestStringValue;
89
use Foo\TestAny;
910
use Foo\TestEnum;
1011
use Foo\TestMessage;
@@ -167,6 +168,14 @@ public function testEncodeTopLevelStringValue()
167168
$this->assertSame("\"a\"", $m->serializeToJsonString());
168169
}
169170

171+
public function testEncodeStringValue()
172+
{
173+
$m = new TestStringValue(['field' => new StringValue(['value' => ''])]);
174+
var_dump($m->getField());
175+
var_dump($m->serializeToJsonString());
176+
$this->assertSame("{\"field\":\"\"}", $m->serializeToJsonString());
177+
}
178+
170179
public function testDecodeTopLevelBytesValue()
171180
{
172181
$m = new BytesValue();

php/tests/memory_leak_test.php

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
require_once('generated/Foo/TestPhpDoc.php');
3232
require_once('generated/Foo/TestRandomFieldOrder.php');
3333
require_once('generated/Foo/TestReverseFieldOrder.php');
34+
require_once('generated/Foo/TestStringValue.php');
3435
require_once('generated/Foo/TestUnpackedMessage.php');
3536
require_once('generated/Foo/testLowerCaseMessage.php');
3637
require_once('generated/Foo/testLowerCaseEnum.php');

php/tests/proto/test.proto

+5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
syntax = "proto3";
22

33
import 'google/protobuf/any.proto';
4+
import 'google/protobuf/wrappers.proto';
45
import 'google/protobuf/struct.proto';
56
import 'proto/test_include.proto';
67
import 'proto/test_no_namespace.proto';
@@ -207,3 +208,7 @@ enum testLowerCaseEnum {
207208
message TestAny {
208209
google.protobuf.Any any = 1;
209210
}
211+
212+
message TestStringValue {
213+
google.protobuf.StringValue field = 1;
214+
}

0 commit comments

Comments
 (0)