diff options
author | Robin Jarry <robin@jarry.cc> | 2023-09-01 09:29:33 +0200 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2023-09-04 15:10:06 +0200 |
commit | a5c4f5d3163a84c0a019fd9dc662f6e49a89818b (patch) | |
tree | 421e4b6f76c62475c9cce3128c02ae5181a359fd /filters | |
parent | 83bd28cde61e6663a98e02c7bc769e374df5a6f0 (diff) | |
download | aerc-a5c4f5d3163a84c0a019fd9dc662f6e49a89818b.tar.gz |
colorize: handle spaces in styleset
Avoid failure when the styleset [viewer] section contains spaces:
~$ cat foo
[viewer]
url.fg = #ffffaf
url.underline = true
header.fg = #af87ff
signature.fg = #af87ff
diff_meta.fg = #ffffff
diff_meta.bold = true
diff_chunk.fg = #00cdcd
diff_add.fg = #00cd00
diff_del.fg = #cd0000
quote_1.fg = #5fafff
quote_2.fg = #ff8700
quote_3.fg = #af87ff
quote_4.fg = #ff5fd7
quote_x.fg = #808080
~$ ./colorize -s foo < bar.eml
error: invalid style attribute 'fg '
Be more restrictive with what characters are part of a style attribute.
Add test styleset with as much weirdness as possible. Update vectors
accordingly. Update sendemail-validate hook to export pedantic CFLAGS.
Reported-by: Tristan Partin <tristan@partin.io>
Signed-off-by: Robin Jarry <robin@jarry.cc>
Reviewed-by: Tristan Partin <tristan@partin.io>
Tested-by: Tristan Partin <tristan@partin.io>
Diffstat (limited to 'filters')
-rw-r--r-- | filters/colorize.c | 13 | ||||
-rwxr-xr-x | filters/test.sh | 25 | ||||
-rw-r--r-- | filters/vectors/colorize-patch.expected | 62 | ||||
-rw-r--r-- | filters/vectors/colorize-quotes.expected | 82 |
4 files changed, 105 insertions, 77 deletions
diff --git a/filters/colorize.c b/filters/colorize.c index b00a88c4..d991cb72 100644 --- a/filters/colorize.c +++ b/filters/colorize.c @@ -257,7 +257,7 @@ static int parse_color(struct color *c, const char *val) c->type = RGB; c->rgb = color; } else { - fprintf(stderr, "error: invalid color value %s\n", val); + fprintf(stderr, "error: invalid color value '%s'\n", val); return 1; } return 0; @@ -272,7 +272,7 @@ static int parse_bool(bool *b, const char *val) } else if (!strcmp(val, "toggle")) { *b = !*b; } else { - fprintf(stderr, "error: invalid bool value %s\n", val); + fprintf(stderr, "error: invalid bool value '%s'\n", val); return 1; } return 0; @@ -314,7 +314,7 @@ static int set_attr(struct style *s, const char *attr, const char *val) s->fg.type = NONE; s->fg.type = NONE; } else { - fprintf(stderr, "error: invalid style attribute %s\n", attr); + fprintf(stderr, "error: invalid style attribute '%s'\n", attr); return 1; } return 0; @@ -336,6 +336,9 @@ static struct {const char *n; struct style *s;} ini_objects[] = { {"quote_x", &styles.quote_x}, }; +/* object attribute value */ +#define STYLE_LINE_FORMAT "%127[0-9A-Za-z_-].%127[0-9a-zA-Z_-] = %127s" + static int parse_styleset(void) { bool in_section = false; @@ -356,10 +359,10 @@ static int parse_styleset(void) /* strip LF, CR, CRLF, LFCR */ buf[strcspn(buf, "\r\n")] = '\0'; if (in_section) { - char obj[64], attr[64], val[64]; + char obj[128], attr[128], val[128]; bool changed = false; - if (sscanf(buf, "%63[^.].%63[^=] = %63s", obj, attr, val) != 3) { + if (sscanf(buf, STYLE_LINE_FORMAT, obj, attr, val) != 3) { if (buf[0] == '[') { /* start of another section */ break; diff --git a/filters/test.sh b/filters/test.sh index 78a52fff..c0d9e6cd 100755 --- a/filters/test.sh +++ b/filters/test.sh @@ -4,6 +4,31 @@ set -e here=$(dirname $0) fail=0 +style=$(mktemp) +trap "rm -f $style" EXIT +cat >$style <<EOF +# stuff + +url.fg = red + +[viewer] +url.underline = true +header.bold= true +signature.dim=true +diff_meta.bold =true +diff_chunk.dim= true +invalid . xxx = lkjfdslkjfdsqqqqqlkjdsq +diff_add.fg=2 +# comment +diff_del.fg= 1 +quote_*.fg =6 +quote_*.dim=true +quote_1.dim=false + +[user] +foo = bar +EOF +export AERC_STYLESET=$style export AERC_OSC8_URLS=1 for vec in $here/vectors/*.in; do diff --git a/filters/vectors/colorize-patch.expected b/filters/vectors/colorize-patch.expected index 733f7628..dd04c5b7 100644 --- a/filters/vectors/colorize-patch.expected +++ b/filters/vectors/colorize-patch.expected @@ -1,49 +1,49 @@ -[1;38;2;175;135;255mFrom:[0m Robin Jarry <[4;38;2;255;255;175m]8;id=colorize-0;mailto://robin@jarry.cc\robin@jarry.cc]8;;\[0m> -[1;38;2;175;135;255mDate:[0m Mon, 26 Dec 2022 17:02:14 +0100 -[1;38;2;175;135;255mSubject:[0m [PATCH aerc] doc: fix numbered lists +[1mFrom:[0m Robin Jarry <[4m]8;id=colorize-0;mailto://robin@jarry.cc\robin@jarry.cc]8;;\[0m> +[1mDate:[0m Mon, 26 Dec 2022 17:02:14 +0100 +[1mSubject:[0m [PATCH aerc] doc: fix numbered lists According to scdoc(5), numbered lists start with a period. -[1;38;2;175;135;255mFixes:[0m af63bd0188d1 ("doc: homogenize scdoc markup") -[1;38;2;175;135;255mSigned-off-by:[0m Robin Jarry <[4;38;2;255;255;175m]8;id=colorize-1;mailto://robin@jarry.cc\robin@jarry.cc]8;;\[0m> +[1mFixes:[0m af63bd0188d1 ("doc: homogenize scdoc markup") +[1mSigned-off-by:[0m Robin Jarry <[4m]8;id=colorize-1;mailto://robin@jarry.cc\robin@jarry.cc]8;;\[0m> --- doc/aerc-stylesets.7.scd | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) -[1;38;2;255;255;255mdiff --git a/doc/aerc-stylesets.7.scd b/doc/aerc-stylesets.7.scd[0m -[1;38;2;255;255;255mindex d82ba7cf8163..34bbf4af0fc5 100644[0m -[1;38;2;255;255;255m--- a/doc/aerc-stylesets.7.scd[0m -[1;38;2;255;255;255m+++ b/doc/aerc-stylesets.7.scd[0m -[1;38;2;0;205;205m@@ -180,20 +180,20 @@[0m[38;2;0;205;205m that style applies, unless overridden by a higher layer.[0m +[1mdiff --git a/doc/aerc-stylesets.7.scd b/doc/aerc-stylesets.7.scd[0m +[1mindex d82ba7cf8163..34bbf4af0fc5 100644[0m +[1m--- a/doc/aerc-stylesets.7.scd[0m +[1m+++ b/doc/aerc-stylesets.7.scd[0m +[2m@@ -180,20 +180,20 @@[0m[0m that style applies, unless overridden by a higher layer.[0m The order that *msglist_\** styles are applied in is, from first to last: -[38;2;205;0;0m-1. *msglist_default*[0m -[38;2;205;0;0m-2. *msglist_unread*[0m -[38;2;205;0;0m-3. *msglist_read*[0m -[38;2;205;0;0m-4. *msglist_flagged*[0m -[38;2;205;0;0m-5. *msglist_deleted*[0m -[38;2;205;0;0m-6. *msglist_marked*[0m -[38;2;0;205;0m+. *msglist_default*[0m -[38;2;0;205;0m+. *msglist_unread*[0m -[38;2;0;205;0m+. *msglist_read*[0m -[38;2;0;205;0m+. *msglist_flagged*[0m -[38;2;0;205;0m+. *msglist_deleted*[0m -[38;2;0;205;0m+. *msglist_marked*[0m +[31m-1. *msglist_default*[0m +[31m-2. *msglist_unread*[0m +[31m-3. *msglist_read*[0m +[31m-4. *msglist_flagged*[0m +[31m-5. *msglist_deleted*[0m +[31m-6. *msglist_marked*[0m +[32m+. *msglist_default*[0m +[32m+. *msglist_unread*[0m +[32m+. *msglist_read*[0m +[32m+. *msglist_flagged*[0m +[32m+. *msglist_deleted*[0m +[32m+. *msglist_marked*[0m So, the marked style will override all other msglist styles. The order for *dirlist_\** styles is: -[38;2;205;0;0m-1. *dirlist_default*[0m -[38;2;205;0;0m-2. *dirlist_unread*[0m -[38;2;205;0;0m-3. *dirlist_recent*[0m -[38;2;0;205;0m+. *dirlist_default*[0m -[38;2;0;205;0m+. *dirlist_unread*[0m -[38;2;0;205;0m+. *dirlist_recent*[0m +[31m-1. *dirlist_default*[0m +[31m-2. *dirlist_unread*[0m +[31m-3. *dirlist_recent*[0m +[32m+. *dirlist_default*[0m +[32m+. *dirlist_unread*[0m +[32m+. *dirlist_recent*[0m ## COLORS -[2;38;2;175;135;255m-- [0m -[2;38;2;175;135;255m2.39.0[0m -[2;38;2;175;135;255m[0m +[2m-- [0m +[2m2.39.0[0m +[2m[0m diff --git a/filters/vectors/colorize-quotes.expected b/filters/vectors/colorize-quotes.expected index 5cb4dacc..4e1e643c 100644 --- a/filters/vectors/colorize-quotes.expected +++ b/filters/vectors/colorize-quotes.expected @@ -1,26 +1,26 @@ Foo Bar, xxxxx: -[38;2;95;175;255m> Lorem ipsum dolor sit amet, insolens adolescens ne usu? In pri denique[0m -[38;2;95;175;255m> argumentum, te autem decore convenire mea! Duo nisl esse an, aliquid[0m -[38;2;95;175;255m> conceptam sea cu. Ignota copiosae gubergren ad est, ut illum doming vocibus[0m -[38;2;95;175;255m> sed. Et vis nulla expetendis mediocritatem, errem option gloriatur at nam?[0m -[38;2;95;175;255m> Brute vidisse corpora ut his, sonet omnesque adipiscing ea quo, cum ea errem[0m -[38;2;95;175;255m> aliquip reformidans?[0m +[0m> Lorem ipsum dolor sit amet, insolens adolescens ne usu? In pri denique[0m +[0m> argumentum, te autem decore convenire mea! Duo nisl esse an, aliquid[0m +[0m> conceptam sea cu. Ignota copiosae gubergren ad est, ut illum doming vocibus[0m +[0m> sed. Et vis nulla expetendis mediocritatem, errem option gloriatur at nam?[0m +[0m> Brute vidisse corpora ut his, sonet omnesque adipiscing ea quo, cum ea errem[0m +[0m> aliquip reformidans?[0m Magna delicatissimi ei vel? Quem petentium scribentur eum ne? Et inani debet cetero mea, sint conceptam efficiendi mel te. Qui ut senserit interesset, per nibh petentium at! Sit docendi laboramus ei, animal insolens ad mea. -[38;2;255;135;0m>> Nostrud alienum nec in, illum errem audiam no per! Saepe alterum vis ea! Ei[0m -[38;2;255;135;0m>> quis minim ius, ut eos mandamus salutandi. Lorem facilisis in nam, ridens[0m -[38;2;255;135;0m>> principes sadipscing et eum, pri graecis singulis ut. Mea dolor primis[0m -[38;2;255;135;0m>> impetus in, his epicurei tacimates id, vis labitur suscipit ad.[0m -[38;2;95;175;255m> Erat alienum interpretaris has et, te vim aliquam molestie. Nam vivendum[0m -[38;2;95;175;255m> facilisis qualisque at, ex his mucius qualisque! Fabulas lucilius adversarium[0m -[38;2;95;175;255m> eu his. Cu soluta inermis accusata usu, his nulla dolore ne, vis id semper[0m -[38;2;95;175;255m> detracto sententia <[4;38;2;255;255;175m]8;id=colorize-0;https://foobar.com\https://foobar.com]8;;\[0m[38;2;95;175;255m> && "[4;38;2;255;255;175m]8;id=colorize-1;https://foobaz.org/\https://foobaz.org/]8;;\[0m[38;2;95;175;255m".[0m -[38;2;95;175;255m>[0m -[38;2;95;175;255m> Error libris deleniti ea mei, vis at elit probo munere, his sint unum[0m -[38;2;95;175;255m> albucius ex. [[4;38;2;255;255;175m]8;id=colorize-2;https://pouet.com/oksuper\https://pouet.com/oksuper]8;;\[0m[38;2;95;175;255m]([4;38;2;255;255;175m]8;id=colorize-3;https://pouet.com/oksuper\https://pouet.com/oksuper]8;;\[0m[38;2;95;175;255m).[0m +[0m>> Nostrud alienum nec in, illum errem audiam no per! Saepe alterum vis ea! Ei[0m +[0m>> quis minim ius, ut eos mandamus salutandi. Lorem facilisis in nam, ridens[0m +[0m>> principes sadipscing et eum, pri graecis singulis ut. Mea dolor primis[0m +[0m>> impetus in, his epicurei tacimates id, vis labitur suscipit ad.[0m +[0m> Erat alienum interpretaris has et, te vim aliquam molestie. Nam vivendum[0m +[0m> facilisis qualisque at, ex his mucius qualisque! Fabulas lucilius adversarium[0m +[0m> eu his. Cu soluta inermis accusata usu, his nulla dolore ne, vis id semper[0m +[0m> detracto sententia <[4m]8;id=colorize-0;https://foobar.com\https://foobar.com]8;;\[0m[0m> && "[4m]8;id=colorize-1;https://foobaz.org/\https://foobaz.org/]8;;\[0m[0m".[0m +[0m>[0m +[0m> Error libris deleniti ea mei, vis at elit probo munere, his sint unum[0m +[0m> albucius ex. [[4m]8;id=colorize-2;https://pouet.com/oksuper\https://pouet.com/oksuper]8;;\[0m[0m]([4m]8;id=colorize-3;https://pouet.com/oksuper\https://pouet.com/oksuper]8;;\[0m[0m).[0m Graece definiebas scripserit ne est? Nec nonumes explicari contentiones ne, vocent iuvaret placerat no vix. Nec et partem salutandi deseruisse, his no @@ -28,38 +28,38 @@ possim malorum pericula. Te quando reprehendunt nam, at consul sadipscing vel? Velit possim aliquando ei per, ne simul quodsi antiopam sea, ullum choro facilisi et pri http:// or https://! -[38;2;95;175;255m> Dico soleat partem ea pro, ad vix impetus splendide. Primis melius principes[0m -[38;2;95;175;255m> pri ad, tacimates pertinacia ei pro? Appareat atomorum oportere at nam, eu[0m -[38;2;95;175;255m> per quod minim reprimique, ornatus graecis ad vel. Malis vulputate ea qui,[0m -[38;2;95;175;255m> eum tacimates recteque et, usu ea dolore vidisse. Brute mediocrem molestiae[0m -[38;2;95;175;255m> sed te. No stet prompta pri, rebum populo nominati eos te.[0m -[38;2;95;175;255m>[0m -[38;2;95;175;255m> [1mdiff --git a/foo b/foo[0m -[38;2;95;175;255m> [1mindex 4b0fe8dded3a..518b67134639 100644[0m -[38;2;95;175;255m> [0m[38;2;205;0;0m--- a/foo[0m -[38;2;95;175;255m> [0m[38;2;0;205;0m+++ b/foo[0m -[38;2;95;175;255m> @@ -131,6 +131,83 @@ func pouet() int {[0m -[38;2;95;175;255m> err := doThis()[0m -[38;2;95;175;255m> [0m -[38;2;95;175;255m> [0m[38;2;205;0;0m- err2 := doThat()[0m -[38;2;95;175;255m> [0m[38;2;0;205;0m+ err2 := notDoThat()[0m -[38;2;95;175;255m> [0m -[38;2;95;175;255m> if err != nil || err2 != nil {[0m +[0m> Dico soleat partem ea pro, ad vix impetus splendide. Primis melius principes[0m +[0m> pri ad, tacimates pertinacia ei pro? Appareat atomorum oportere at nam, eu[0m +[0m> per quod minim reprimique, ornatus graecis ad vel. Malis vulputate ea qui,[0m +[0m> eum tacimates recteque et, usu ea dolore vidisse. Brute mediocrem molestiae[0m +[0m> sed te. No stet prompta pri, rebum populo nominati eos te.[0m +[0m>[0m +[0m> [1mdiff --git a/foo b/foo[0m +[0m> [1mindex 4b0fe8dded3a..518b67134639 100644[0m +[0m> [0m[31m--- a/foo[0m +[0m> [0m[32m+++ b/foo[0m +[0m> @@ -131,6 +131,83 @@ func pouet() int {[0m +[0m> err := doThis()[0m +[0m> [0m +[0m> [0m[31m- err2 := doThat()[0m +[0m> [0m[32m+ err2 := notDoThat()[0m +[0m> [0m +[0m> if err != nil || err2 != nil {[0m Id vix referrentur philosophia, veri labores an nec. Noster denique no duo, sit -ei diam inermis vocibus! Mutat principes ex pro, at [4;38;2;255;255;175m]8;id=colorize-4;mailto://~rjarry/aerc-devel@lists.sr.ht\~rjarry/aerc-devel@lists.sr.ht]8;;\[0m. +ei diam inermis vocibus! Mutat principes ex pro, at [4m]8;id=colorize-4;mailto://~rjarry/aerc-devel@lists.sr.ht\~rjarry/aerc-devel@lists.sr.ht]8;;\[0m. Has putent verterem constituto ex, tale electram duo at! Ei nulla lucilius intellegat nam, pro quod epicuri dissentiet ut, omnis voluptatibus definitiones -vim at [[4;38;2;255;255;175m]8;id=colorize-5;irc://foo.bar\irc://foo.bar]8;;\[0m] <[4;38;2;255;255;175m]8;id=colorize-6;mailto://jeanpierre@foobaz.org\jeanpierre@foobaz.org]8;;\[0m>. +vim at [[4m]8;id=colorize-5;irc://foo.bar\irc://foo.bar]8;;\[0m] <[4m]8;id=colorize-6;mailto://jeanpierre@foobaz.org\jeanpierre@foobaz.org]8;;\[0m>. -[4;38;2;255;255;175m]8;id=colorize-7;https://git-man-page-generator.lokaltog.net/#Y2xhcCQkY29tbWFuZA==\https://git-man-page-generator.lokaltog.net/#Y2xhcCQkY29tbWFuZA==]8;;\[0m +[4m]8;id=colorize-7;https://git-man-page-generator.lokaltog.net/#Y2xhcCQkY29tbWFuZA==\https://git-man-page-generator.lokaltog.net/#Y2xhcCQkY29tbWFuZA==]8;;\[0m Eam mundi libris debitis ad, eam regione numquam at. Eum omnes bonorum eu, oporteat assueverit disputationi nam ne, nonumes iracundia mea ad! Duo libris recusabo id, ceteros salutatus inciderint vim ea. Et graeco reformidans vel? Ei -has labore quidam [4;38;2;255;255;175m]8;id=colorize-8;https://foobaz.com/ooo<uuuu>okf\https://foobaz.com/ooo<uuuu>okf]8;;\[0m? +has labore quidam [4m]8;id=colorize-8;https://foobaz.com/ooo<uuuu>okf\https://foobaz.com/ooo<uuuu>okf]8;;\[0m? -[38;2;128;128;128m>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> sympa, non?[0m +[0m>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> sympa, non?[0m -[2;38;2;175;135;255m-- [0m -[2;38;2;175;135;255mBatman[0m +[2m-- [0m +[2mBatman[0m |