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.
This commit is contained in:
Martchus 2022-08-12 00:27:06 +02:00
parent df27013c2f
commit f068c44172
1 changed files with 22 additions and 2 deletions

View File

@ -185,7 +185,17 @@ template <class ImplementationType> inline std::vector<const TagValue *> FieldMa
template <class ImplementationType> inline bool FieldMapBasedTag<ImplementationType>::setValue(KnownField field, const TagValue &value)
{
return setValue(fieldId(field), value);
const auto id = fieldId(field);
if constexpr (std::is_arithmetic_v<IdentifierType>) {
if (!id) {
return false;
}
} else {
if (id.empty()) {
return false;
}
}
return setValue(id, value);
}
/*!
@ -266,7 +276,17 @@ bool FieldMapBasedTag<ImplementationType>::setValues(const IdentifierType &id, c
*/
template <class ImplementationType> bool FieldMapBasedTag<ImplementationType>::setValues(KnownField field, const std::vector<TagValue> &values)
{
return setValues(fieldId(field), values);
const auto id = fieldId(field);
if constexpr (std::is_arithmetic_v<IdentifierType>) {
if (!id) {
return false;
}
} else {
if (id.empty()) {
return false;
}
}
return setValues(id, values);
}
template <class ImplementationType> inline bool FieldMapBasedTag<ImplementationType>::hasField(KnownField field) const