From d7b5f51fdc664a4cf6d35f2b7bac375cdfc1aeb6 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Mon, 30 Mar 2020 23:59:01 -0500 Subject: [PATCH] [ox/mc] Prevent reading array length of absent array --- deps/ox/src/ox/mc/read.hpp | 11 +++++++---- deps/ox/src/ox/mc/write.hpp | 12 ++++++------ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/deps/ox/src/ox/mc/read.hpp b/deps/ox/src/ox/mc/read.hpp index 4f096d67..a9a56492 100644 --- a/deps/ox/src/ox/mc/read.hpp +++ b/deps/ox/src/ox/mc/read.hpp @@ -199,10 +199,13 @@ Error MetalClawReader::field(const char*, Handler handler) { template Error MetalClawReader::field(const char* name, ox::Vector *val) { - const auto [len, err] = arrayLength(false); - oxReturnError(err); - val->resize(len); - return field(name, val->data(), val->size()); + if (m_fieldPresence.get(m_field)) { + const auto [len, err] = arrayLength(false); + oxReturnError(err); + val->resize(len); + return field(name, val->data(), val->size()); + } + return OxError(0); } template diff --git a/deps/ox/src/ox/mc/write.hpp b/deps/ox/src/ox/mc/write.hpp index f912e16b..3f4382df 100644 --- a/deps/ox/src/ox/mc/write.hpp +++ b/deps/ox/src/ox/mc/write.hpp @@ -98,11 +98,6 @@ Error MetalClawWriter::field(const char*, T *val) { return OxError(0); } -template -Error MetalClawWriter::field(const char*, ox::Vector *val) { - return field(nullptr, val->data(), val->size()); -} - template Error MetalClawWriter::field(const char*, T *val, std::size_t len) { auto err = OxError(0); @@ -130,11 +125,16 @@ Error MetalClawWriter::field(const char*, T *val, std::size_t len) { fieldSet = true; } - err |= m_fieldPresence.set(m_field, fieldSet); + oxReturnError(m_fieldPresence.set(m_field, fieldSet)); m_field++; return err; } +template +Error MetalClawWriter::field(const char*, ox::Vector *val) { + return field(nullptr, val->data(), val->size()); +} + template Error MetalClawWriter::appendInteger(I val) { auto err = OxError(0);