From 30bf73163f14dbf4665ff550e2e4c4ca627045aa Mon Sep 17 00:00:00 2001 From: Martchus Date: Wed, 16 Mar 2022 21:09:20 +0100 Subject: [PATCH] cli: Catch conversion exceptions when making tag values from CLI args --- cli/mainfeatures.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/cli/mainfeatures.cpp b/cli/mainfeatures.cpp index 1dceda6..16a4ec0 100644 --- a/cli/mainfeatures.cpp +++ b/cli/mainfeatures.cpp @@ -692,7 +692,12 @@ void setTagInfo(const SetTagInfoArgs &args) } // add text value if (relevantDenotedValue->type != DenotationType::File) { - convertedValues.emplace_back(relevantDenotedValue->value, TagTextEncoding::Utf8, usedEncoding); + try { + convertedValues.emplace_back(relevantDenotedValue->value, TagTextEncoding::Utf8, usedEncoding); + } catch (const ConversionException &e) { + diag.emplace_back(DiagLevel::Critical, + argsToString("Unable to parse value specified for field \"", denotedScope.field.name(), "\": ", e.what()), context); + } continue; } // add value from file @@ -741,7 +746,9 @@ void setTagInfo(const SetTagInfoArgs &args) convertedValues.emplace_back(std::move(value)); } } catch (const TagParser::Failure &) { - diag.emplace_back(DiagLevel::Critical, argsToString("Unable to parse specified file \"", path, "\"."), context); + diag.emplace_back(DiagLevel::Critical, argsToString("Unable to parse specified file \"", path, "\": unable to determine MIME type"), context); + } catch (const ConversionException &e) { + diag.emplace_back(DiagLevel::Critical, argsToString("Unable to parse specified file \"", path, "\": ", e.what()), context); } catch (const std::ios_base::failure &e) { diag.emplace_back(DiagLevel::Critical, argsToString("An IO error occurred when parsing the specified file \"", path, "\": ", e.what()), context);