From ef3deaad4a2213eff44469438b0845d1b1469b83 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 15 Jun 2014 23:34:43 -0400 Subject: [PATCH] Task - When a duration fails to parse during ::modify, it must raise an exception, and not silently skip the attribute. --- src/Task.cpp | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/src/Task.cpp b/src/Task.cpp index 5eef0b5da..b27908587 100644 --- a/src/Task.cpp +++ b/src/Task.cpp @@ -2034,25 +2034,22 @@ void Task::modify (modType type, bool text_required /* = false */) { // The duration is stored in raw form, but it must still be valid, // and therefore is parsed first. - try + Eval e; + e.addSource (domSource); + e.addSource (namedDates); + e.ambiguity (false); + contextTask = *this; + + Variant v; + e.evaluateInfixExpression (value, v); + if (v.type () == Variant::type_duration) { - Eval e; - e.addSource (domSource); - e.addSource (namedDates); - e.ambiguity (false); - contextTask = *this; - - Variant v; - e.evaluateInfixExpression (value, v); - if (v.type () == Variant::type_duration) - { - // Store the raw value, for 'recur'. - set (name, value); - ++modCount; - } + // Store the raw value, for 'recur'. + set (name, value); + ++modCount; } - - catch (...) { /* NOP */ } + else + throw format ("The duration value '{1}' is not supported.", value); } // Need handling for numeric types, used by UDAs.