From f068c441729714ed5b43976467cf62c05e53342e Mon Sep 17 00:00:00 2001 From: Martchus Date: Fri, 12 Aug 2022 00:27:06 +0200 Subject: [PATCH] Prevent adding fields with an invalid ID When there's no mapping for the specified known field, `fieldId()` returns an invalid field ID. It should not be passed to `setValues()` as we would otherwise attempt to create an invalid field. --- fieldbasedtag.h | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/fieldbasedtag.h b/fieldbasedtag.h index b18ad09..608e338 100644 --- a/fieldbasedtag.h +++ b/fieldbasedtag.h @@ -185,7 +185,17 @@ template inline std::vector FieldMa template inline bool FieldMapBasedTag::setValue(KnownField field, const TagValue &value) { - return setValue(fieldId(field), value); + const auto id = fieldId(field); + if constexpr (std::is_arithmetic_v) { + if (!id) { + return false; + } + } else { + if (id.empty()) { + return false; + } + } + return setValue(id, value); } /*! @@ -266,7 +276,17 @@ bool FieldMapBasedTag::setValues(const IdentifierType &id, c */ template bool FieldMapBasedTag::setValues(KnownField field, const std::vector &values) { - return setValues(fieldId(field), values); + const auto id = fieldId(field); + if constexpr (std::is_arithmetic_v) { + if (!id) { + return false; + } + } else { + if (id.empty()) { + return false; + } + } + return setValues(id, values); } template inline bool FieldMapBasedTag::hasField(KnownField field) const