imp: csv: check assigned account names are valid (parseable) (#1978)

This commit is contained in:
Simon Michael 2023-01-11 21:42:47 -10:00
parent c95c4ca8d6
commit dfebf3174c
2 changed files with 17 additions and 3 deletions

View File

@ -73,7 +73,7 @@ import Text.Printf (printf)
import Hledger.Data
import Hledger.Utils
import Hledger.Read.Common (aliasesFromOpts, Reader(..), InputOpts(..), amountp, statusp, journalFinalise )
import Hledger.Read.Common (aliasesFromOpts, Reader(..), InputOpts(..), amountp, statusp, journalFinalise, accountnamep )
--- ** doctest setup
-- $setup
@ -1199,7 +1199,12 @@ getAccount rules record mamount mbalance n =
-- accountN is set to the empty string - no posting will be generated
Just "" -> Nothing
-- accountN is set (possibly to "expenses:unknown"! #1192) - mark it final
Just a -> Just (a, True)
Just a ->
-- Check it and reject if invalid.. sometimes people try
-- to set an amount or comment along with the account name.
case parsewith (accountnamep >> eof) a of
Left e -> usageError $ errorBundlePretty e
Right _ -> Just (a, True)
-- accountN is unset
Nothing ->
case (mamount, mbalance) of

View File

@ -1059,7 +1059,16 @@ fields date, b, c
$ ./csvtest.sh
>=
# 54. Some validation is done on account name assignments; trying to
# also set an amount there (with 2+ spaces) will be rejected. (#1978)
<
2022-01-01,1
RULES
fields date,amt
account1 assets %amt
$ ./csvtest.sh
>2 /unexpected space/
>=1
## .
#<