diff options
author | Josh Haberman <jhaberman@gmail.com> | 2019-01-24 15:53:36 -0800 |
---|---|---|
committer | Josh Haberman <jhaberman@gmail.com> | 2019-01-24 15:53:36 -0800 |
commit | 2719bcff0d1972994e98433b830a921e2ded5fc4 (patch) | |
tree | c99588297758815d798cd2e7db5dc5d98796ed12 /upb/def.c | |
parent | ca5f951137a121e55ca21ee162afd1be596775ba (diff) |
Fixes for Google-internal tests.
Diffstat (limited to 'upb/def.c')
-rw-r--r-- | upb/def.c | 22 |
1 files changed, 22 insertions, 0 deletions
@@ -958,6 +958,28 @@ static bool create_oneofdef( static bool parse_default(const symtab_addctx *ctx, const char *str, size_t len, upb_fielddef *f) { char *end; + char nullz[64]; + errno = 0; + + switch (upb_fielddef_type(f)) { + case UPB_TYPE_INT32: + case UPB_TYPE_INT64: + case UPB_TYPE_UINT32: + case UPB_TYPE_UINT64: + case UPB_TYPE_DOUBLE: + case UPB_TYPE_FLOAT: + /* Standard C number parsing functions expect null-terminated strings. */ + if (len >= sizeof(nullz) - 1) { + return false; + } + memcpy(nullz, str, len); + nullz[len] = '\0'; + str = nullz; + break; + default: + break; + } + switch (upb_fielddef_type(f)) { case UPB_TYPE_INT32: { long val = strtol(str, &end, 0); |