From: Vsevolod Stakhov Date: Fri, 25 Oct 2019 19:26:32 +0000 (+0100) Subject: [Minor] Another uuencode fix X-Git-Tag: 2.1~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=76181fd6823a644c2670b36341915ad51e804eb2;p=thirdparty%2Frspamd.git [Minor] Another uuencode fix --- diff --git a/src/libutil/str_util.c b/src/libutil/str_util.c index d1f2cbfe69..866ef52d85 100644 --- a/src/libutil/str_util.c +++ b/src/libutil/str_util.c @@ -2206,8 +2206,8 @@ rspamd_decode_uue_buf (const gchar *in, gsize inlen, const gchar *p; gssize remain; gboolean base64 = FALSE; - goffset newlines_fsm[3], pos; - static const gchar *nline = "\r\n"; + goffset pos; + const gchar *nline = "\r\n"; p = in; o = out; @@ -2224,29 +2224,24 @@ rspamd_decode_uue_buf (const gchar *in, gsize inlen, return -1; } - rspamd_substring_preprocess_kmp (nline, 2, newlines_fsm, - rspamd_substring_cmp_func); - if (memcmp (p, "begin ", sizeof ("begin ") - 1) == 0) { p += sizeof ("begin ") - 1; remain -= sizeof ("begin ") - 1; - pos = rspamd_substring_search_preprocessed (p, remain, nline, 2, - newlines_fsm, rspamd_substring_cmp_func); + pos = rspamd_memcspn (p, nline, remain); } else if (memcmp (p, "begin-base64 ", sizeof ("begin-base64 ") - 1) == 0) { base64 = TRUE; p += sizeof ("begin-base64 ") - 1; remain -= sizeof ("begin-base64 ") - 1; - pos = rspamd_substring_search_preprocessed (p, remain, nline, 2, - newlines_fsm, rspamd_substring_cmp_func); + pos = rspamd_memcspn (p, nline, remain); } else { /* Crap */ return (-1); } - if (pos == -1) { + if (pos == -1 || remain == 0) { /* Crap */ return (-1); } @@ -2274,12 +2269,15 @@ rspamd_decode_uue_buf (const gchar *in, gsize inlen, const gchar *eol; gint i, ch; - pos = rspamd_substring_search_preprocessed (p, remain, nline, 2, - newlines_fsm, rspamd_substring_cmp_func); + pos = rspamd_memcspn (p, nline, remain); + + if (pos == 0) { + /* Skip empty lines */ + SKIP_NEWLINE; - if (pos == -1) { - /* Assume end of buffer */ - pos = remain; + if (remain == 0) { + break; + } } eol = p + pos;