diff options
Diffstat (limited to 'community/libsieve/crash-fix.patch')
-rw-r--r-- | community/libsieve/crash-fix.patch | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/community/libsieve/crash-fix.patch b/community/libsieve/crash-fix.patch new file mode 100644 index 000000000..7dfde87cc --- /dev/null +++ b/community/libsieve/crash-fix.patch @@ -0,0 +1,78 @@ +diff -wbBur libsieve-2.3.1/src/sv_parser/header.y libsieve-2.3.1.q/src/sv_parser/header.y +--- libsieve-2.3.1/src/sv_parser/header.y 2012-05-31 13:16:50.000000000 +0400 ++++ libsieve-2.3.1.q/src/sv_parser/header.y 2013-09-02 20:21:26.000000000 +0400 +@@ -70,7 +70,7 @@ + } + | body WRAP { + TRACE_DEBUG( "body: body WRAP: %s %s", $1, $2 ); +- $$ = libsieve_strbuf(context->strbuf, libsieve_strconcat( $1, $2, NULL ), strlen($1)+strlen($2), FREEME); ++ $$ = libsieve_strbuf(context->strbuf, libsieve_strconcat( $1 ? $1 : "", $2, NULL ), strlen($1 ? $1 : "")+strlen($2), FREEME); + }; + + %% +diff -wbBur libsieve-2.3.1/src/sv_parser/addr.y libsieve-2.3.1.q/src/sv_parser/addr.y +--- libsieve-2.3.1/src/sv_parser/addr.y 2012-05-31 13:16:50.000000000 +0400 ++++ libsieve-2.3.1.q/src/sv_parser/addr.y 2013-09-02 21:42:15.267979609 +0400 +@@ -38,6 +38,7 @@ + + /* sv_util */ + #include "src/sv_util/util.h" ++#include "src/sv_interface/context2.h" + + /* sv_parser */ + #include "addr.h" +@@ -74,10 +74,10 @@ + context->addr_addr->name = $1; + }; + +-address: mailbox_list { TRACE_DEBUG( "address: mailbox: %s", $1 ); } +- | group { TRACE_DEBUG( "address: group: %s", $1 ); }; ++address: mailbox_list { $$ = $1; TRACE_DEBUG( "address: mailbox: %s", $1 ); } ++ | group { $$ = $1; TRACE_DEBUG( "address: group: %s", $1 ); }; + +-group: phrase ':' ';' { TRACE_DEBUG( "group: phrase: %s", $1 ); } ++group: phrase ':' ';' { $$ = $1; TRACE_DEBUG( "group: phrase: %s", $1 ); } + | phrase ':' mailbox_list ';' { TRACE_DEBUG( "group: phrase mailbox_list: %s %s", $1, $3 ); }; + + mailbox_list: mailbox { +@@ -94,8 +94,8 @@ + }; + + mailbox: +- angle_addr { TRACE_DEBUG( "mailbox: angle_addr: %s", $1 ); } +- | addr_spec { TRACE_DEBUG( "mailbox: addr_spec: %s", $1 ); } ++ angle_addr { $$ = $1; TRACE_DEBUG( "mailbox: angle_addr: %s", $1 ); } ++ | addr_spec { $$ = $1; TRACE_DEBUG( "mailbox: addr_spec: %s", $1 ); } + | phrase angle_addr { + TRACE_DEBUG( "mailbox: phrase angle_addr: %s %s", $1, $2 ); + // This is a "top terminal" state... +@@ -103,7 +103,7 @@ + context->addr_addr->name = libsieve_strdup( $1 ); + }; + +-angle_addr: '<' addr_spec '>' { TRACE_DEBUG( "angle_addr: addr_spec: %s", $2 ); } ++angle_addr: '<' addr_spec '>' { $$ = $2; TRACE_DEBUG( "angle_addr: addr_spec: %s", $2 ); } + | '<' route ':' addr_spec '>' { + TRACE_DEBUG( "angle_addr: route addr_spec: %s:%s", $2, $4 ); + // This is a "top terminal" state... +@@ -133,13 +133,13 @@ + $$ = libsieve_strbuf(context->strbuf, libsieve_strconcat( "@", $2, ",", $4, NULL ), strlen($2)+strlen($4)+2, FREEME); + }; + +-local_part: DOTATOM { TRACE_DEBUG( "local_part: DOTATOM: %s", $1 ); } +- | ATOM { TRACE_DEBUG( "local_part: ATOM : %s", $1); } +- | qstring { TRACE_DEBUG( "local_part: qstring: %s", $1); } +- +-domain: DOTATOM { TRACE_DEBUG( "domain: DOTATOM: %s", $1 ); } +- | ATOM { TRACE_DEBUG("domain: ATOM: %s", $1); } +- | domainlit { TRACE_DEBUG( "domain: domainlit: %s", $1); }; ++local_part: DOTATOM { $$ = $1; TRACE_DEBUG( "local_part: DOTATOM: %s", $1 ); } ++ | ATOM { $$ = $1; TRACE_DEBUG( "local_part: ATOM : %s", $1); } ++ | qstring { $$ = $1; TRACE_DEBUG( "local_part: qstring: %s", $1); } ++ ++domain: DOTATOM { $$ = $1; TRACE_DEBUG( "domain: DOTATOM: %s", $1 ); } ++ | ATOM { $$ = $1; TRACE_DEBUG("domain: ATOM: %s", $1); } ++ | domainlit { $$ = $1; TRACE_DEBUG( "domain: domainlit: %s", $1); }; + + domainlit: '[' DTEXT ']' { + TRACE_DEBUG( "domainlit: DTEXT: %s", $2 ); |