From 06579f69e64c5da58396ed5b0c990a7feda7a937 Mon Sep 17 00:00:00 2001 From: Artyom Ivanov Date: Tue, 14 Jul 2026 17:28:32 +0300 Subject: [PATCH] refactor(cast format): Improve error message about invalid format --- src/common/CvtFormat.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/common/CvtFormat.cpp b/src/common/CvtFormat.cpp index db00c32a660..6bb21af3a95 100644 --- a/src/common/CvtFormat.cpp +++ b/src/common/CvtFormat.cpp @@ -1100,7 +1100,18 @@ namespace const Format::Patterns pattern = mapFormatStrToFormatPattern(patternStr); if (pattern == Format::NONE) - invalidPatternException(patternStr, cb); + { + // An invalid `patternStr` may be incomplete, so just parse it from the beginning up to the separator. + // Since patterns can be combined without separators, we can print multiple patterns, but it's fine. + const FB_SIZE_T patternBeginPos = i - patternStr.length(); + for (; i < formatLength; i++) + { + if (isSeparator(formatUpper[i])) + break; + } + std::string_view errorPattern(formatUpper.data() + patternBeginPos, i - patternBeginPos); + invalidPatternException(errorPattern, cb); + } if (outFormatPatterns & pattern) cb->err(Arg::Gds(isc_can_not_use_same_pattern_twice) << patternStr); if (!patternIsCompatibleWithDscType(desc, pattern))