[ox/mc] Prevent reading array length of absent array

This commit is contained in:
Gary Talent 2020-03-30 23:59:01 -05:00
parent 33047fc047
commit d7b5f51fdc
2 changed files with 13 additions and 10 deletions

View File

@ -199,10 +199,13 @@ Error MetalClawReader::field(const char*, Handler handler) {
template<typename T> template<typename T>
Error MetalClawReader::field(const char* name, ox::Vector<T> *val) { Error MetalClawReader::field(const char* name, ox::Vector<T> *val) {
const auto [len, err] = arrayLength(false); if (m_fieldPresence.get(m_field)) {
oxReturnError(err); const auto [len, err] = arrayLength(false);
val->resize(len); oxReturnError(err);
return field(name, val->data(), val->size()); val->resize(len);
return field(name, val->data(), val->size());
}
return OxError(0);
} }
template<typename T> template<typename T>

View File

@ -98,11 +98,6 @@ Error MetalClawWriter::field(const char*, T *val) {
return OxError(0); return OxError(0);
} }
template<typename T>
Error MetalClawWriter::field(const char*, ox::Vector<T> *val) {
return field(nullptr, val->data(), val->size());
}
template<typename T> template<typename T>
Error MetalClawWriter::field(const char*, T *val, std::size_t len) { Error MetalClawWriter::field(const char*, T *val, std::size_t len) {
auto err = OxError(0); auto err = OxError(0);
@ -130,11 +125,16 @@ Error MetalClawWriter::field(const char*, T *val, std::size_t len) {
fieldSet = true; fieldSet = true;
} }
err |= m_fieldPresence.set(m_field, fieldSet); oxReturnError(m_fieldPresence.set(m_field, fieldSet));
m_field++; m_field++;
return err; return err;
} }
template<typename T>
Error MetalClawWriter::field(const char*, ox::Vector<T> *val) {
return field(nullptr, val->data(), val->size());
}
template<typename I> template<typename I>
Error MetalClawWriter::appendInteger(I val) { Error MetalClawWriter::appendInteger(I val) {
auto err = OxError(0); auto err = OxError(0);