From cf28f28347d65e352f429263500f982ae3e51aed Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Wed, 3 Feb 2021 17:59:10 -0800 Subject: [PATCH] Updated upb to allow nonzero offset minutes in JSON timestamps. (#8258) * Updated upb to allow nonzero offset minutes in JSON timestamps. This is to pick up https://github.com/protocolbuffers/upb/pull/367 * Reverted error message change. * Fixed quote chars. --- php/ext/google/protobuf/php-upb.c | 16 +++++++++++----- php/ext/google/protobuf/php-upb.h | 1 + ruby/ext/google/protobuf_c/ruby-upb.c | 10 ++++++---- ruby/ext/google/protobuf_c/ruby-upb.h | 2 +- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/php/ext/google/protobuf/php-upb.c b/php/ext/google/protobuf/php-upb.c index 4c6a56a43a89..c56a567ca38a 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 996a6d8c81f8..bd72cd9c081f 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 9c048da98bac..a7aeda2df253 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 106c73b6934b..fa0439355897 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 {