From fbf8b2458c6ae3ad2ed2bf0575b94800722d5a04 Mon Sep 17 00:00:00 2001 From: Michael Budde Date: Sat, 16 Feb 2019 21:24:44 +0100 Subject: Fix tag value parsing If a tag is more than 2 characters from the beginning of the comment the tag value offset will be wrong. #1702 gives an example where the tag line starts with `;;` and the tag value thus becomes `: Bar` because of this bug. The use `index` in the offset calulation seems to be a lucky coincidence that works in the common case: "; tag: value" Fixes #1702 --- doc/NEWS.md | 2 ++ src/item.cc | 2 +- test/regress/1702.test | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 test/regress/1702.test diff --git a/doc/NEWS.md b/doc/NEWS.md index ce468b7f..f8196a20 100644 --- a/doc/NEWS.md +++ b/doc/NEWS.md @@ -6,6 +6,8 @@ - Make sorting order of lot information deterministic (bug #1747) +- Fix bug in tag value parsing (bug #1702) + - Remove the `org` command, which was always a hack to begin with (bug #1706) - Provide Docker information in README diff --git a/src/item.cc b/src/item.cc index 7132103e..d46fba8b 100644 --- a/src/item.cc +++ b/src/item.cc @@ -198,7 +198,7 @@ void item_t::parse_tags(const char * p, tag = string(q, len - index); string_map::iterator i; - string field(p + len + index); + string field(p + (q - buf.get()) + len); trim(field); if (by_value) { bind_scope_t bound_scope(scope, *this); diff --git a/test/regress/1702.test b/test/regress/1702.test new file mode 100644 index 00000000..813cf37b --- /dev/null +++ b/test/regress/1702.test @@ -0,0 +1,17 @@ +tag Foo + assert value =~ /^Bar$/ + +2019/01/01 * Payee + ;; Foo: Bar + Income:Foo $-1 + Assets:Cash $1 +2019/01/01 * Another Payee + Assets:Cash $-1 + Expenses:Baz $1 + +test bal + $1 Expenses:Baz + $-1 Income:Foo +-------------------- + 0 +end test -- cgit v1.2.3