google-protobuf 4.29.0.rc.2-x64-mingw-ucrt → 4.29.0.rc.3-x64-mingw-ucrt

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ca8c5cad15e8b8c4549d0353ae3811a7db32dfa9b96c1f01734c3990c36b1202
4
- data.tar.gz: 689a5ca362d915bdc50110acbc0742d31baa680dad41668d6b9695e3ef35b9cf
3
+ metadata.gz: 1c396107a079f3360b1eef5e7e0268c36dafb8bf4a9333cab42fc23855e951ef
4
+ data.tar.gz: f85bb0e6f6d0ed8c0478bcafb914a20f0edb7a59d3039edfed677471cf0cc36e
5
5
  SHA512:
6
- metadata.gz: 40d094a305a5e839b348206bd2a12c696f71ed5b7e1fa4fc4ebcd4cdcd563e71b2daeddb824963dc77136f55b339e7a94f270e31d127d6ca2d8572f90d4962a5
7
- data.tar.gz: 54b501e251366b9c6962a6e96b3da53cfea83e6750ea0a68f1727401c4c376d1fe5a4446204e4e2937b53c962d4badd34af3413888591388b21c521fe1671847
6
+ metadata.gz: b5684cb65ffcc0c648e3cea9d58bb1b913ecd382f76ceecfce6d7f10a21a001b1bd89cbe6aadd22cfb5c5b9cc715c920dad7c89c414ae442543060fab36280f2
7
+ data.tar.gz: faf04aba45b96168e151a40bfe467fbc6eff403c6da60299547d187d37f2a98ccb2a1e46ff9b1dd3b2cb4fe08cdb611629361e788a5529ea2dcc67985320b391
@@ -1038,11 +1038,21 @@ static VALUE Message_decode_json(int argc, VALUE* argv, VALUE klass) {
1038
1038
 
1039
1039
  upb_Status_Clear(&status);
1040
1040
  const upb_DefPool* pool = upb_FileDef_Pool(upb_MessageDef_File(msg->msgdef));
1041
- if (!upb_JsonDecode(RSTRING_PTR(data), RSTRING_LEN(data),
1042
- (upb_Message*)msg->msg, msg->msgdef, pool, options,
1043
- Arena_get(msg->arena), &status)) {
1044
- rb_raise(cParseError, "Error occurred during parsing: %s",
1045
- upb_Status_ErrorMessage(&status));
1041
+
1042
+ int result = upb_JsonDecodeDetectingNonconformance(
1043
+ RSTRING_PTR(data), RSTRING_LEN(data), (upb_Message*)msg->msg,
1044
+ msg->msgdef, pool, options, Arena_get(msg->arena), &status);
1045
+
1046
+ switch (result) {
1047
+ case kUpb_JsonDecodeResult_Ok:
1048
+ break;
1049
+ case kUpb_JsonDecodeResult_OkWithEmptyStringNumerics:
1050
+ rb_warn("%s", upb_Status_ErrorMessage(&status));
1051
+ break;
1052
+ case kUpb_JsonDecodeResult_Error:
1053
+ rb_raise(cParseError, "Error occurred during parsing: %s",
1054
+ upb_Status_ErrorMessage(&status));
1055
+ break;
1046
1056
  }
1047
1057
 
1048
1058
  return msg_rb;
@@ -523,6 +523,7 @@ typedef struct {
523
523
  upb_Arena* arena; /* TODO: should we have a tmp arena for tmp data? */
524
524
  const upb_DefPool* symtab;
525
525
  int depth;
526
+ int result;
526
527
  upb_Status* status;
527
528
  jmp_buf err;
528
529
  int line;
@@ -1152,6 +1153,16 @@ static int64_t jsondec_strtoint64(jsondec* d, upb_StringView str) {
1152
1153
  return ret;
1153
1154
  }
1154
1155
 
1156
+ static void jsondec_checkempty(jsondec* d, upb_StringView str,
1157
+ const upb_FieldDef* f) {
1158
+ if (str.size != 0) return;
1159
+ d->result = kUpb_JsonDecodeResult_OkWithEmptyStringNumerics;
1160
+ upb_Status_SetErrorFormat(d->status,
1161
+ "Empty string is not a valid number (field: %s). "
1162
+ "This will be an error in a future version.",
1163
+ upb_FieldDef_FullName(f));
1164
+ }
1165
+
1155
1166
  /* Primitive value types ******************************************************/
1156
1167
 
1157
1168
  /* Parse INT32 or INT64 value. */
@@ -1173,6 +1184,7 @@ static upb_MessageValue jsondec_int(jsondec* d, const upb_FieldDef* f) {
1173
1184
  }
1174
1185
  case JD_STRING: {
1175
1186
  upb_StringView str = jsondec_string(d);
1187
+ jsondec_checkempty(d, str, f);
1176
1188
  val.int64_val = jsondec_strtoint64(d, str);
1177
1189
  break;
1178
1190
  }
@@ -1210,6 +1222,7 @@ static upb_MessageValue jsondec_uint(jsondec* d, const upb_FieldDef* f) {
1210
1222
  }
1211
1223
  case JD_STRING: {
1212
1224
  upb_StringView str = jsondec_string(d);
1225
+ jsondec_checkempty(d, str, f);
1213
1226
  val.uint64_val = jsondec_strtouint64(d, str);
1214
1227
  break;
1215
1228
  }
@@ -1238,14 +1251,26 @@ static upb_MessageValue jsondec_double(jsondec* d, const upb_FieldDef* f) {
1238
1251
  break;
1239
1252
  case JD_STRING:
1240
1253
  str = jsondec_string(d);
1241
- if (jsondec_streql(str, "NaN")) {
1254
+ if (str.size == 0) {
1255
+ jsondec_checkempty(d, str, f);
1256
+ val.double_val = 0.0;
1257
+ } else if (jsondec_streql(str, "NaN")) {
1242
1258
  val.double_val = NAN;
1243
1259
  } else if (jsondec_streql(str, "Infinity")) {
1244
1260
  val.double_val = INFINITY;
1245
1261
  } else if (jsondec_streql(str, "-Infinity")) {
1246
1262
  val.double_val = -INFINITY;
1247
1263
  } else {
1248
- val.double_val = strtod(str.data, NULL);
1264
+ char* end;
1265
+ val.double_val = strtod(str.data, &end);
1266
+ if (end != str.data + str.size) {
1267
+ d->result = kUpb_JsonDecodeResult_OkWithEmptyStringNumerics;
1268
+ upb_Status_SetErrorFormat(
1269
+ d->status,
1270
+ "Non-number characters in quoted number (field: %s). "
1271
+ "This will be an error in a future version.",
1272
+ upb_FieldDef_FullName(f));
1273
+ }
1249
1274
  }
1250
1275
  break;
1251
1276
  default:
@@ -1987,10 +2012,10 @@ static void jsondec_wellknown(jsondec* d, upb_Message* msg,
1987
2012
  }
1988
2013
  }
1989
2014
 
1990
- static bool upb_JsonDecoder_Decode(jsondec* const d, upb_Message* const msg,
1991
- const upb_MessageDef* const m) {
2015
+ static int upb_JsonDecoder_Decode(jsondec* const d, upb_Message* const msg,
2016
+ const upb_MessageDef* const m) {
1992
2017
  UPB_ASSERT(!upb_Message_IsFrozen(msg));
1993
- if (UPB_SETJMP(d->err)) return false;
2018
+ if (UPB_SETJMP(d->err)) return kUpb_JsonDecodeResult_Error;
1994
2019
 
1995
2020
  jsondec_tomsg(d, msg, m);
1996
2021
 
@@ -1999,16 +2024,19 @@ static bool upb_JsonDecoder_Decode(jsondec* const d, upb_Message* const msg,
1999
2024
  jsondec_consumews(d);
2000
2025
 
2001
2026
  if (d->ptr == d->end) {
2002
- return true;
2027
+ return d->result;
2003
2028
  } else {
2004
2029
  jsondec_seterrmsg(d, "unexpected trailing characters");
2005
- return false;
2030
+ return kUpb_JsonDecodeResult_Error;
2006
2031
  }
2007
2032
  }
2008
2033
 
2009
- bool upb_JsonDecode(const char* buf, size_t size, upb_Message* msg,
2010
- const upb_MessageDef* m, const upb_DefPool* symtab,
2011
- int options, upb_Arena* arena, upb_Status* status) {
2034
+ int upb_JsonDecodeDetectingNonconformance(const char* buf, size_t size,
2035
+ upb_Message* msg,
2036
+ const upb_MessageDef* m,
2037
+ const upb_DefPool* symtab,
2038
+ int options, upb_Arena* arena,
2039
+ upb_Status* status) {
2012
2040
  UPB_ASSERT(!upb_Message_IsFrozen(msg));
2013
2041
  jsondec d;
2014
2042
 
@@ -2021,6 +2049,7 @@ bool upb_JsonDecode(const char* buf, size_t size, upb_Message* msg,
2021
2049
  d.status = status;
2022
2050
  d.options = options;
2023
2051
  d.depth = 64;
2052
+ d.result = kUpb_JsonDecodeResult_Ok;
2024
2053
  d.line = 1;
2025
2054
  d.line_begin = d.ptr;
2026
2055
  d.debug_field = NULL;
@@ -8993,7 +9022,7 @@ static const upb_MiniTableField google_protobuf_FileDescriptorSet__fields[1] = {
8993
9022
  const upb_MiniTable google__protobuf__FileDescriptorSet_msg_init = {
8994
9023
  &google_protobuf_FileDescriptorSet__submsgs[0],
8995
9024
  &google_protobuf_FileDescriptorSet__fields[0],
8996
- 16, 1, kUpb_ExtMode_NonExtendable, 1, UPB_FASTTABLE_MASK(8), 0,
9025
+ 16, 1, kUpb_ExtMode_Extendable, 1, UPB_FASTTABLE_MASK(8), 0,
8997
9026
  #ifdef UPB_TRACING_ENABLED
8998
9027
  "google.protobuf.FileDescriptorSet",
8999
9028
  #endif
@@ -10049,7 +10078,7 @@ static const upb_MiniTableField google_protobuf_SourceCodeInfo__fields[1] = {
10049
10078
  const upb_MiniTable google__protobuf__SourceCodeInfo_msg_init = {
10050
10079
  &google_protobuf_SourceCodeInfo__submsgs[0],
10051
10080
  &google_protobuf_SourceCodeInfo__fields[0],
10052
- 16, 1, kUpb_ExtMode_NonExtendable, 1, UPB_FASTTABLE_MASK(8), 0,
10081
+ 16, 1, kUpb_ExtMode_Extendable, 1, UPB_FASTTABLE_MASK(8), 0,
10053
10082
  #ifdef UPB_TRACING_ENABLED
10054
10083
  "google.protobuf.SourceCodeInfo",
10055
10084
  #endif