From c2c58e5930a1c944eb2757d04dee0f1480034c2d Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Tue, 29 Jul 2008 15:19:28 +0200 Subject: [PATCH] Testsuite: added compile error testcases and discovered one new issue. --- TODO | 5 +- src/lib-sieve/ext-encoded-character.c | 2 + src/testsuite/tests/compile/errors.svtest | 85 +++++++++++++++++++ .../tests/compile/errors/address-part.sieve | 17 ++++ .../compile/errors/encoded-character.sieve | 23 +++++ .../tests/compile/errors/envelope.sieve | 23 +++++ src/testsuite/tests/compile/errors/keep.sieve | 14 +++ src/testsuite/tests/compile/errors/size.sieve | 47 ++++++++++ src/testsuite/tests/compile/errors/stop.sieve | 33 +++++++ src/testsuite/tests/control-structures.svtest | 7 +- 10 files changed, 250 insertions(+), 6 deletions(-) create mode 100644 src/testsuite/tests/compile/errors/address-part.sieve create mode 100644 src/testsuite/tests/compile/errors/encoded-character.sieve create mode 100644 src/testsuite/tests/compile/errors/envelope.sieve create mode 100644 src/testsuite/tests/compile/errors/keep.sieve create mode 100644 src/testsuite/tests/compile/errors/size.sieve create mode 100644 src/testsuite/tests/compile/errors/stop.sieve diff --git a/TODO b/TODO index 6deb57d78..adf050216 100644 --- a/TODO +++ b/TODO @@ -1,8 +1,9 @@ Next (in order of descending priority/precedence): * Full standards compliance review for the engine and all fully implemented sieve extensions. Issues discovered so far: - - :matches : match values must only be changed when the test - matches. + - Encoded character processing must not raise an error on substitutions + that are not syntactically valid. + - :matches : match values must only be changed when the test matches. - If an address is not syntactically valid, then it will not be matched by tests specifying ":localpart" or ":domain". - Fix/Report issues listed in 'doc/rfc/RFC Controversy.txt' diff --git a/src/lib-sieve/ext-encoded-character.c b/src/lib-sieve/ext-encoded-character.c index 334640611..08a43e4c6 100644 --- a/src/lib-sieve/ext-encoded-character.c +++ b/src/lib-sieve/ext-encoded-character.c @@ -258,6 +258,8 @@ bool arg_encoded_string_validate } } } T_END; + + if ( !result ) return FALSE; if ( newstr != NULL ) { if ( strstart != strend ) diff --git a/src/testsuite/tests/compile/errors.svtest b/src/testsuite/tests/compile/errors.svtest index 28e709856..028ce6b40 100644 --- a/src/testsuite/tests/compile/errors.svtest +++ b/src/testsuite/tests/compile/errors.svtest @@ -157,3 +157,88 @@ test "Require errors (FIXME: count only)" { test_fail "wrong number of errors reported"; } } + +/* + * Size test + */ + +test "Size errors (FIXME: count only)" { + if test_compile "errors/size.sieve" { + test_fail "compile should have failed."; + } + + if not test_error :count "eq" :comparator "i;ascii-numeric" "7" { + test_fail "wrong number of errors reported"; + } +} + +/* + * Envelope test + */ + +test "Envelope errors (FIXME: count only)" { + if test_compile "errors/envelope.sieve" { + test_fail "compile should have failed."; + } + + if not test_error :count "eq" :comparator "i;ascii-numeric" "3" { + test_fail "wrong number of errors reported"; + } +} + +/* + * Stop command + */ + +test "Stop errors (FIXME: count only)" { + if test_compile "errors/stop.sieve" { + test_fail "compile should have failed."; + } + + if not test_error :count "eq" :comparator "i;ascii-numeric" "8" { + test_fail "wrong number of errors reported"; + } +} + +/* + * Keep command + */ + +test "Keep errors (FIXME: count only)" { + if test_compile "errors/keep.sieve" { + test_fail "compile should have failed."; + } + + if not test_error :count "eq" :comparator "i;ascii-numeric" "3" { + test_fail "wrong number of errors reported"; + } +} + +/* + * ADDRESS-PART errors + */ + +test "ADDRESS-PART errors (FIXME: count only)" { + if test_compile "errors/address-part.sieve" { + test_fail "compile should have failed."; + } + + if not test_error :count "eq" :comparator "i;ascii-numeric" "3" { + test_fail "wrong number of errors reported"; + } +} + +/* + * Encoded-character errors + */ + +test "Encoded-character errors (FIXME: count only)" { + if test_compile "errors/encoded-character.sieve" { + test_fail "compile should have failed."; + } + + if not test_error :count "eq" :comparator "i;ascii-numeric" "3" { + test_fail "wrong number of errors reported"; + } +} + diff --git a/src/testsuite/tests/compile/errors/address-part.sieve b/src/testsuite/tests/compile/errors/address-part.sieve new file mode 100644 index 000000000..0abc07d64 --- /dev/null +++ b/src/testsuite/tests/compile/errors/address-part.sieve @@ -0,0 +1,17 @@ +/* + * Address part errors + * + * Total errors: 2 (+1 = 3) + */ + +# Duplicate address part (1) +if address :all :comparator "i;octet" :domain "from" "STEPHAN" { + + # Duplicate address part (2) + if address :domain :localpart :comparator "i;octet" "from" "drunksnipers.com" { + keep; + } + + stop; +} + diff --git a/src/testsuite/tests/compile/errors/encoded-character.sieve b/src/testsuite/tests/compile/errors/encoded-character.sieve new file mode 100644 index 000000000..698eb0801 --- /dev/null +++ b/src/testsuite/tests/compile/errors/encoded-character.sieve @@ -0,0 +1,23 @@ +/* + * Encoded-character errors + * + * Total errors: 2 (+1 = 3) + */ + +require "encoded-character"; +require "fileinto"; + +# Invalid unicode character (1) +fileinto "INBOX.${unicode:200000}"; + +# Not an error +#fileinto "INBOX.${unicode:200000"; + +# Invalid unicode character (2) +fileinto "INBOX.${Unicode:DF01}"; + +# Not an error +#fileinto "INBOX.${Unicode:DF01"; + + + diff --git a/src/testsuite/tests/compile/errors/envelope.sieve b/src/testsuite/tests/compile/errors/envelope.sieve new file mode 100644 index 000000000..71d85b4b3 --- /dev/null +++ b/src/testsuite/tests/compile/errors/envelope.sieve @@ -0,0 +1,23 @@ +/* + * Envelope test errors + * + * Total errors: 2 (+1 = 3) + */ + +require "envelope"; + +# Not an error +if envelope :is "to" "frop@rename-it.nl" { +} + +# Unknown envelope part (1) +if envelope :is "frop" "frop@rename-it.nl" { +} + +# Not an error +if envelope :is ["to","from"] "frop@rename-it.nl" { +} + +# Unknown envelope part (2) +if envelope :is ["to","frop"] "frop@rename-it.nl" { +} diff --git a/src/testsuite/tests/compile/errors/keep.sieve b/src/testsuite/tests/compile/errors/keep.sieve new file mode 100644 index 000000000..bbce0d530 --- /dev/null +++ b/src/testsuite/tests/compile/errors/keep.sieve @@ -0,0 +1,14 @@ +/* + * Keep errors + * + * Total erors: 2 (+1 = 3) + */ + +# Spurious string argument +keep "frop"; + +# Spurious test +keep true; + +# Not an error +keep; diff --git a/src/testsuite/tests/compile/errors/size.sieve b/src/testsuite/tests/compile/errors/size.sieve new file mode 100644 index 000000000..71281ae7f --- /dev/null +++ b/src/testsuite/tests/compile/errors/size.sieve @@ -0,0 +1,47 @@ +/* + * Size test errors + * + * Total errors: 6 (+1 = 7) + */ + +# Used as command (1) +size :under 23; + +# Missing argument (2) +if size { +} + +# Missing :over/:under (3) +if size 45 { + discard; +} + +# No error +if size :over 34K { + stop; +} + +# No error +if size :under 34M { + stop; +} + +# Conflicting tags (4) +if size :under :over 34 { + keep; +} + +# Duplicate tags (5) +if size :over :over 45M { + stop; +} + +# Wrong argument order (6) +if size 34M :over { + stop; +} + +# No error; but worthy of a warning +if size :under 0 { + stop; +} diff --git a/src/testsuite/tests/compile/errors/stop.sieve b/src/testsuite/tests/compile/errors/stop.sieve new file mode 100644 index 000000000..75a3d76b3 --- /dev/null +++ b/src/testsuite/tests/compile/errors/stop.sieve @@ -0,0 +1,33 @@ +/* + * Stop command errors + * + * Total errors: 7 (+1 = 8) + */ + +# Spurious string argument +stop "frop"; + +# Spurious number argument +stop 13; + +# Spurious string list argument +stop [ "frop", "frop" ]; + +# Spurious test +stop true; + +# Spurious test list +stop ( true, false ); + +# Spurious command block +stop { + keep; +} + +# Spurious argument and test +stop "frop" true { + stop; +} + +# Not an error +stop; diff --git a/src/testsuite/tests/control-structures.svtest b/src/testsuite/tests/control-structures.svtest index 0dbb73b6c..8459df2fb 100644 --- a/src/testsuite/tests/control-structures.svtest +++ b/src/testsuite/tests/control-structures.svtest @@ -8,7 +8,7 @@ Subject: Test Test! . ; -/* + test "IF-true" { if true { } else { @@ -38,7 +38,7 @@ test "ELSEIF-false" { test_fail "executed wrong alternative (elsif)"; } else { } -}*/ +} test "IF-address-true" { if address :is "from" "stephan@rename-it.nl" { @@ -47,7 +47,6 @@ test "IF-address-true" { } } -/* test "IF-address-false" { if address :is "from" "tss@iki.fi" { test_fail "executed wrong alternative"; @@ -147,4 +146,4 @@ test "STOP" { stop; test_fail "continued after stop"; } -*/ + -- GitLab