google-protobuf 4.29.0.rc.2-x64-mingw32 → 4.29.0.rc.3-x64-mingw32

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e787e95730b2c6f97c1f9ac1105f55b48760c964c3b417b2636fb6d5050c8fe
4
- data.tar.gz: 619c0a935c890d499b66f2a774519e37eb1d64fadfd137214ab918ec900dd58d
3
+ metadata.gz: d32464a5d98300d723110cfc8effefdc2d8c266dfa6b0016f185ce377aace2da
4
+ data.tar.gz: c28d2c5277e7a7cc1b4ccbc3390ce0c2cb0dddb6482a21374a628a6d5614122d
5
5
  SHA512:
6
- metadata.gz: a850586e9796e58b18fae0424276990dd122cea043865872ff0927f177075ecbe5a7800a4a9a64d7851f8a1f4bf221a0d34270533a3529fcf38456e9ad5ba392
7
- data.tar.gz: 2f33171ac9155762bf5105aaf6cac0c9a7eb7dc78465f744295fe17cfa5857bb5164a39608935026e6c1f134a198736765d3243084bdb915db24553201d1a153
6
+ metadata.gz: 2fea49fad8778913935a0eff3b3616706be376f263643d6e6b1ab9e916540503875e5a75762b0cbc6bfc50a279da19dbaa7ed3fbd4650924c6a7970edff0f0b1
7
+ data.tar.gz: 5fbbde04895103d289f0168e8117ed8d9a9ecce71d86eb84c3be1c9647b6049682301008cbcc9f3c335722a9c957f1707048aa88b880d174815b8777ebec3520
@@ -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