diff options
author | Michael Budde <mbudde@gmail.com> | 2019-02-16 21:24:44 +0100 |
---|---|---|
committer | Martin Michlmayr <tbm@cyrius.com> | 2019-03-30 20:31:28 +0700 |
commit | fbf8b2458c6ae3ad2ed2bf0575b94800722d5a04 (patch) | |
tree | 46d550893231e0111d1453c695684413de8593bf | |
parent | 13044f9c8d5757b6885d78cb5f7f37770e3750ab (diff) | |
download | fork-ledger-fbf8b2458c6ae3ad2ed2bf0575b94800722d5a04.tar.gz fork-ledger-fbf8b2458c6ae3ad2ed2bf0575b94800722d5a04.tar.bz2 fork-ledger-fbf8b2458c6ae3ad2ed2bf0575b94800722d5a04.zip |
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
-rw-r--r-- | doc/NEWS.md | 2 | ||||
-rw-r--r-- | src/item.cc | 2 | ||||
-rw-r--r-- | test/regress/1702.test | 17 |
3 files changed, 20 insertions, 1 deletions
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 |