summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFrank LENORMAND <lenormf@gmail.com>2015-12-11 22:58:28 +0300
committerFrank LENORMAND <lenormf@gmail.com>2015-12-11 22:58:28 +0300
commit49a5bbf3ca441e71cdeea376a2809b289efc5b33 (patch)
tree9ba9383491748de8f1653a559f96bb81a179b527 /src
parent1ed866dbf09955abfbb46a7068a8a8dc2c6a9847 (diff)
Ensure that at least one character follows a ',' or a '+' sign in a face
description (respectively a background color and attributes).
Diffstat (limited to 'src')
-rw-r--r--src/face_registry.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/face_registry.cc b/src/face_registry.cc
index 5e10c540..79781c24 100644
--- a/src/face_registry.cc
+++ b/src/face_registry.cc
@@ -9,10 +9,15 @@ namespace Kakoune
static Face parse_face(StringView facedesc)
{
+ const String invalid_face_error = "invalid face description, expected <fg>[,<bg>][+<attr>]";
auto bg_it = find(facedesc, ',');
auto attr_it = find(facedesc, '+');
- if (bg_it != facedesc.end() and attr_it < bg_it)
- throw runtime_error("invalid face description, expected <fg>[,<bg>][+<attr>]");
+ if (bg_it != facedesc.end()
+ and (attr_it < bg_it or (bg_it + 1) == facedesc.end()))
+ throw runtime_error(invalid_face_error);
+ if (attr_it != facedesc.end()
+ and (attr_it + 1) == facedesc.end())
+ throw runtime_error(invalid_face_error);
Face res;
res.fg = attr_it != facedesc.begin() ?
str_to_color({facedesc.begin(), std::min(attr_it, bg_it)}) : Color::Default;