diff --git a/php/ext/google/protobuf/php-upb.c b/php/ext/google/protobuf/php-upb.c index 4c6a56a43..c56a567ca 100644 --- a/php/ext/google/protobuf/php-upb.c +++ b/php/ext/google/protobuf/php-upb.c @@ -6711,6 +6711,10 @@ size_t _upb_symtab_bytesloaded(const upb_symtab *s) { return s->bytes_loaded; } +upb_arena *_upb_symtab_arena(const upb_symtab *s) { + return s->arena; +} + #undef CHK_OOM @@ -8020,7 +8024,7 @@ static void jsondec_field(jsondec *d, upb_msg *msg, const upb_msgdef *m) { if (!f) { if ((d->options & UPB_JSONDEC_IGNOREUNKNOWN) == 0) { - jsondec_errf(d, "Unknown field: '" UPB_STRVIEW_FORMAT "'", + jsondec_errf(d, "No such field: " UPB_STRVIEW_FORMAT, UPB_STRVIEW_ARGS(name)); } jsondec_skipval(d); @@ -8173,7 +8177,8 @@ static void jsondec_timestamp(jsondec *d, upb_msg *msg, const upb_msgdef *m) { { /* [+-]08:00 or Z */ - int ofs = 0; + int ofs_hour = 0; + int ofs_min = 0; bool neg = false; if (ptr == end) goto malformed; @@ -8184,9 +8189,10 @@ static void jsondec_timestamp(jsondec *d, upb_msg *msg, const upb_msgdef *m) { /* fallthrough */ case '+': if ((end - ptr) != 5) goto malformed; - ofs = jsondec_tsdigits(d, &ptr, 2, ":00"); - ofs *= 60 * 60; - seconds.int64_val += (neg ? ofs : -ofs); + ofs_hour = jsondec_tsdigits(d, &ptr, 2, ":"); + ofs_min = jsondec_tsdigits(d, &ptr, 2, NULL); + ofs_min = ((ofs_hour * 60) + ofs_min) * 60; + seconds.int64_val += (neg ? ofs_min : -ofs_min); break; case 'Z': if (ptr != end) goto malformed; diff --git a/php/ext/google/protobuf/php-upb.h b/php/ext/google/protobuf/php-upb.h index 996a6d8c8..bd72cd9c0 100644 --- a/php/ext/google/protobuf/php-upb.h +++ b/php/ext/google/protobuf/php-upb.h @@ -4178,6 +4178,7 @@ const upb_filedef *upb_symtab_addfile( upb_symtab *s, const google_protobuf_FileDescriptorProto *file, upb_status *status); size_t _upb_symtab_bytesloaded(const upb_symtab *s); +upb_arena *_upb_symtab_arena(const upb_symtab *s); /* For generated code only: loads a generated descriptor. */ typedef struct upb_def_init { diff --git a/ruby/ext/google/protobuf_c/ruby-upb.c b/ruby/ext/google/protobuf_c/ruby-upb.c index 9c048da98..a7aeda2df 100755 --- a/ruby/ext/google/protobuf_c/ruby-upb.c +++ b/ruby/ext/google/protobuf_c/ruby-upb.c @@ -7793,7 +7793,8 @@ static void jsondec_timestamp(jsondec *d, upb_msg *msg, const upb_msgdef *m) { { /* [+-]08:00 or Z */ - int ofs = 0; + int ofs_hour = 0; + int ofs_min = 0; bool neg = false; if (ptr == end) goto malformed; @@ -7804,9 +7805,10 @@ static void jsondec_timestamp(jsondec *d, upb_msg *msg, const upb_msgdef *m) { /* fallthrough */ case '+': if ((end - ptr) != 5) goto malformed; - ofs = jsondec_tsdigits(d, &ptr, 2, ":00"); - ofs *= 60 * 60; - seconds.int64_val += (neg ? ofs : -ofs); + ofs_hour = jsondec_tsdigits(d, &ptr, 2, ":"); + ofs_min = jsondec_tsdigits(d, &ptr, 2, NULL); + ofs_min = ((ofs_hour * 60) + ofs_min) * 60; + seconds.int64_val += (neg ? ofs_min : -ofs_min); break; case 'Z': if (ptr != end) goto malformed; diff --git a/ruby/ext/google/protobuf_c/ruby-upb.h b/ruby/ext/google/protobuf_c/ruby-upb.h index 106c73b69..fa0439355 100755 --- a/ruby/ext/google/protobuf_c/ruby-upb.h +++ b/ruby/ext/google/protobuf_c/ruby-upb.h @@ -4161,7 +4161,6 @@ const upb_filedef *upb_filedef_dep(const upb_filedef *f, int i); const upb_msgdef *upb_filedef_msg(const upb_filedef *f, int i); const upb_enumdef *upb_filedef_enum(const upb_filedef *f, int i); const upb_symtab *upb_filedef_symtab(const upb_filedef *f); -upb_arena *_upb_symtab_arena(const upb_symtab *s); /* upb_symtab *****************************************************************/ @@ -4179,6 +4178,7 @@ const upb_filedef *upb_symtab_addfile( upb_symtab *s, const google_protobuf_FileDescriptorProto *file, upb_status *status); size_t _upb_symtab_bytesloaded(const upb_symtab *s); +upb_arena *_upb_symtab_arena(const upb_symtab *s); /* For generated code only: loads a generated descriptor. */ typedef struct upb_def_init {