Skip to content

Commit 3c4aa1b

Browse files
l46kokcopybara-github
authored andcommitted
Change FIXED32 and FIXED64 decoding to UnsignedLong
PiperOrigin-RevId: 993744421
1 parent e613b3e commit 3c4aa1b

4 files changed

Lines changed: 39 additions & 17 deletions

File tree

‎common/src/main/java/dev/cel/common/values/ProtoLiteCelValueConverter.java‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ private static Object readFixed32BitField(
110110
case FLOAT:
111111
return inputStream.readFloat();
112112
case FIXED32:
113+
return UnsignedLong.fromLongBits(
114+
Integer.toUnsignedLong(inputStream.readRawLittleEndian32()));
113115
case SFIXED32:
114116
return inputStream.readRawLittleEndian32();
115117
default:
@@ -124,6 +126,7 @@ private static Object readFixed64BitField(
124126
case DOUBLE:
125127
return inputStream.readDouble();
126128
case FIXED64:
129+
return UnsignedLong.fromLongBits(inputStream.readRawLittleEndian64());
127130
case SFIXED64:
128131
return inputStream.readRawLittleEndian64();
129132
default:
@@ -257,11 +260,13 @@ private Object getScalarDefaultValue(FieldLiteDescriptor fieldDescriptor) {
257260
JavaType type = fieldDescriptor.getJavaType();
258261
switch (type) {
259262
case INT:
260-
return fieldDescriptor.getProtoFieldType().equals(FieldLiteDescriptor.Type.UINT32)
263+
return (fieldDescriptor.getProtoFieldType().equals(FieldLiteDescriptor.Type.UINT32)
264+
|| fieldDescriptor.getProtoFieldType().equals(FieldLiteDescriptor.Type.FIXED32))
261265
? UnsignedLong.ZERO
262266
: Defaults.defaultValue(long.class);
263267
case LONG:
264-
return fieldDescriptor.getProtoFieldType().equals(FieldLiteDescriptor.Type.UINT64)
268+
return (fieldDescriptor.getProtoFieldType().equals(FieldLiteDescriptor.Type.UINT64)
269+
|| fieldDescriptor.getProtoFieldType().equals(FieldLiteDescriptor.Type.FIXED64))
265270
? UnsignedLong.ZERO
266271
: Defaults.defaultValue(long.class);
267272
case ENUM:

‎common/src/test/java/dev/cel/common/values/ProtoMessageLiteValueTest.java‎

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,10 @@ private enum SelectFieldTestCase {
9797
UINT64("single_uint64", UnsignedLong.MAX_VALUE),
9898
FLOAT("single_float", 1.5d),
9999
DOUBLE("single_double", 2.5d),
100-
FIXED32("single_fixed32", 20),
101-
SFIXED32("single_sfixed32", 30),
102-
FIXED64("single_fixed64", 40),
103-
SFIXED64("single_sfixed64", 50),
100+
FIXED32("single_fixed32", UnsignedLong.valueOf(0xFFFFFFFFL)),
101+
SFIXED32("single_sfixed32", 30L),
102+
FIXED64("single_fixed64", UnsignedLong.MAX_VALUE),
103+
SFIXED64("single_sfixed64", 50L),
104104
STRING("single_string", "test"),
105105
BYTES("single_bytes", CelByteString.of(new byte[] {0x01})),
106106
DURATION("single_duration", Duration.ofSeconds(100)),
@@ -116,6 +116,11 @@ private enum SelectFieldTestCase {
116116
REPEATED_INT64("repeated_int64", ImmutableList.of(5L, 6L)),
117117
REPEATED_UINT64(
118118
"repeated_uint64", ImmutableList.of(UnsignedLong.valueOf(7L), UnsignedLong.valueOf(8L))),
119+
REPEATED_FIXED32(
120+
"repeated_fixed32",
121+
ImmutableList.of(UnsignedLong.valueOf(20L), UnsignedLong.valueOf(0xFFFFFFFFL))),
122+
REPEATED_FIXED64(
123+
"repeated_fixed64", ImmutableList.of(UnsignedLong.valueOf(40L), UnsignedLong.MAX_VALUE)),
119124
REPEATED_FLOAT("repeated_float", ImmutableList.of(1.5d, 2.5d)),
120125
REPEATED_DOUBLE("repeated_double", ImmutableList.of(3.5d, 4.5d)),
121126

@@ -155,9 +160,9 @@ public void selectField_success(@TestParameter SelectFieldTestCase testCase) {
155160
.setSingleSint64(2L)
156161
.setSingleUint32(1)
157162
.setSingleUint64(UnsignedLong.MAX_VALUE.longValue())
158-
.setSingleFixed32(20)
163+
.setSingleFixed32(-1)
159164
.setSingleSfixed32(30)
160-
.setSingleFixed64(40)
165+
.setSingleFixed64(-1L)
161166
.setSingleSfixed64(50)
162167
.setSingleFloat(1.5f)
163168
.setSingleDouble(2.5d)
@@ -178,6 +183,10 @@ public void selectField_success(@TestParameter SelectFieldTestCase testCase) {
178183
.addRepeatedInt64(6L)
179184
.addRepeatedUint64(7L)
180185
.addRepeatedUint64(8L)
186+
.addRepeatedFixed32(20)
187+
.addRepeatedFixed32(-1)
188+
.addRepeatedFixed64(40L)
189+
.addRepeatedFixed64(-1L)
181190
.addRepeatedFloat(1.5f)
182191
.addRepeatedFloat(2.5f)
183192
.addRepeatedDouble(3.5d)
@@ -212,10 +221,10 @@ private enum DefaultValueTestCase {
212221
SINT64("single_sint64", 0L),
213222
UINT32("single_uint32", UnsignedLong.ZERO),
214223
UINT64("single_uint64", UnsignedLong.ZERO),
215-
FIXED32("single_fixed32", 0),
216-
SFIXED32("single_sfixed32", 0),
217-
FIXED64("single_fixed64", 0),
218-
SFIXED64("single_sfixed64", 0),
224+
FIXED32("single_fixed32", UnsignedLong.ZERO),
225+
SFIXED32("single_sfixed32", 0L),
226+
FIXED64("single_fixed64", UnsignedLong.ZERO),
227+
SFIXED64("single_sfixed64", 0L),
219228
FLOAT("single_float", 0d),
220229
DOUBLE("single_double", 0d),
221230
STRING("single_string", ""),

‎runtime/src/test/java/dev/cel/runtime/CelLiteRuntimeAndroidTest.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -618,8 +618,8 @@ public void eval_protoMessage_repeatedFields(String checkedExpr) throws Exceptio
618618
ImmutableList.of(UnsignedLong.valueOf(7L), UnsignedLong.valueOf(8L)),
619619
ImmutableList.of(9L, 10L),
620620
ImmutableList.of(11L, 12L),
621-
ImmutableList.of(13L, 14L),
622-
ImmutableList.of(15L, 16L),
621+
ImmutableList.of(UnsignedLong.valueOf(13L), UnsignedLong.valueOf(14L)),
622+
ImmutableList.of(UnsignedLong.valueOf(15L), UnsignedLong.valueOf(16L)),
623623
ImmutableList.of(17L, 18L),
624624
ImmutableList.of(19L, 20L),
625625
ImmutableList.of(21.1d, 22.2d),

‎runtime/src/test/java/dev/cel/runtime/CelLiteRuntimeTest.java‎

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,17 @@ public void fieldSelection_literals(String expression) throws Exception {
173173
@Test
174174
@TestParameters("{expression: 'msg.single_uint32'}")
175175
@TestParameters("{expression: 'msg.single_uint64'}")
176+
@TestParameters("{expression: 'msg.single_fixed32'}")
177+
@TestParameters("{expression: 'msg.single_fixed64'}")
176178
public void fieldSelection_unsigned(String expression) throws Exception {
177179
CelAbstractSyntaxTree ast = CEL_COMPILER.compile(expression).getAst();
178-
TestAllTypes msg = TestAllTypes.newBuilder().setSingleUint32(4).setSingleUint64(4L).build();
180+
TestAllTypes msg =
181+
TestAllTypes.newBuilder()
182+
.setSingleUint32(4)
183+
.setSingleUint64(4L)
184+
.setSingleFixed32(4)
185+
.setSingleFixed64(4L)
186+
.build();
179187

180188
Object result = CEL_RUNTIME.createProgram(ast).eval(ImmutableMap.of("msg", msg));
181189

@@ -556,8 +564,8 @@ private enum DefaultValueTestCase {
556564
UINT64("msg.single_uint64", UnsignedLong.ZERO),
557565
SINT32("msg.single_sint32", 0L),
558566
SINT64("msg.single_sint64", 0L),
559-
FIXED32("msg.single_fixed32", 0L),
560-
FIXED64("msg.single_fixed64", 0L),
567+
FIXED32("msg.single_fixed32", UnsignedLong.ZERO),
568+
FIXED64("msg.single_fixed64", UnsignedLong.ZERO),
561569
SFIXED32("msg.single_sfixed32", 0L),
562570
SFIXED64("msg.single_sfixed64", 0L),
563571
FLOAT("msg.single_float", 0.0d),

0 commit comments

Comments
 (0)