Browse Source

[Fix] Fix quoted-printable soft newlines bugged case

tags/2.7
Vsevolod Stakhov 3 years ago
parent
commit
f71dee6d40
2 changed files with 18 additions and 4 deletions
  1. 8
    4
      src/libutil/str_util.c
  2. 10
    0
      test/lua/unit/quoted_printable.lua

+ 8
- 4
src/libutil/str_util.c View File

@@ -2341,15 +2341,19 @@ decode:
if (c >= '0' && c <= '9') { ret = c - '0'; }
else if (c >= 'A' && c <= 'F') { ret = c - 'A' + 10; }
else if (c >= 'a' && c <= 'f') { ret = c - 'a' + 10; }
else if (c == '\r' || c == '\n') {
/* Soft line break */
while (remain > 0 && (*p == '\r' || *p == '\n')) {
remain --;
else if (c == '\r') {
/* Eat one more endline */
if (remain > 0 && *p == '\n') {
p ++;
remain --;
}

continue;
}
else if (c == '\n') {
/* Soft line break */
continue;
}
else {
/* Hack, hack, hack, treat =<garbadge> as =<garbadge> */
if (remain > 0) {

+ 10
- 0
test/lua/unit/quoted_printable.lua View File

@@ -102,6 +102,16 @@ context("Quoted-Printable encoding", function()
'Mailscape External Mail Flow Outbound Test=',
'asan found'
},
{
'foo=\n\nbar',
'foo\nbar',
'Soft newline followed by hard newline (LF)',
},
{
'foo=\r\n\r\nbar',
'foo\r\nbar',
'Soft newline followed by hard newline (CRLF)',
},
}

for _,c in ipairs(cases) do

Loading…
Cancel
Save