summaryrefslogtreecommitdiff
path: root/libmailutils
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2020-07-23 23:22:01 +0300
committerSergey Poznyakoff <gray@gnu.org>2020-07-23 23:34:09 +0300
commit68d345c743c9aebe221957d1fb820edf2bcdd7d5 (patch)
tree369c504ac3487a5e160e44d0d18ca98d2246d6d5 /libmailutils
parent9b62d1ff01f949aeff165753eea17e108bcccd9b (diff)
downloadmailutils-68d345c743c9aebe221957d1fb820edf2bcdd7d5.tar.gz
mailutils-68d345c743c9aebe221957d1fb820edf2bcdd7d5.tar.bz2
Minor fixes in base64 and inline-comment filters
* libmailutils/diag/errors (MU_ERR_BASE64): New error code. * libmailutils/filter/base64.c (_base64_decoder): Stop decoding and return failure if padding length gets greater than 3 * libmailutils/filter/inline-comment.c (_ilcmt_decoder): Make sure proper error code is set.
Diffstat (limited to 'libmailutils')
-rw-r--r--libmailutils/diag/errors2
-rw-r--r--libmailutils/filter/base64.c5
-rw-r--r--libmailutils/filter/inline-comment.c10
3 files changed, 15 insertions, 2 deletions
diff --git a/libmailutils/diag/errors b/libmailutils/diag/errors
index d9d8ea613..e27512fbf 100644
--- a/libmailutils/diag/errors
+++ b/libmailutils/diag/errors
@@ -139,3 +139,5 @@ MU_ERR_USER4 _("User-defined error 4")
MU_ERR_USER5 _("User-defined error 5")
MU_ERR_USER6 _("User-defined error 6")
MU_ERR_USER7 _("User-defined error 7")
+
+MU_ERR_BASE64 _("invalid base64 input")
diff --git a/libmailutils/filter/base64.c b/libmailutils/filter/base64.c
index 2a8bb0c0b..0333902f6 100644
--- a/libmailutils/filter/base64.c
+++ b/libmailutils/filter/base64.c
@@ -150,6 +150,11 @@ _base64_decoder (void *xd MU_ARG_UNUSED,
data[i++] = tmp;
else if (*(iptr-1) == '=')
{
+ if (pad == 3)
+ {
+ iobuf->errcode = MU_ERR_BASE64;
+ return mu_filter_failure;
+ }
data[i++] = 0;
pad++;
}
diff --git a/libmailutils/filter/inline-comment.c b/libmailutils/filter/inline-comment.c
index 045ebafb9..1a379dbc8 100644
--- a/libmailutils/filter/inline-comment.c
+++ b/libmailutils/filter/inline-comment.c
@@ -216,7 +216,10 @@ _ilcmt_decoder (void *xd, enum mu_filter_command cmd,
if (!(pd->flags & ILCMT_SQUEEZE_WS))
{
if (ilcmt_save (pd, *iptr))
- return mu_filter_failure;
+ {
+ iobuf->errcode = errno;
+ return mu_filter_failure;
+ }
}
iptr++;
}
@@ -290,7 +293,10 @@ _ilcmt_decoder (void *xd, enum mu_filter_command cmd,
if (!(pd->flags & ILCMT_SQUEEZE_WS))
{
if (ilcmt_save (pd, *iptr))
- return mu_filter_failure;
+ {
+ iobuf->errcode = errno;
+ return mu_filter_failure;
+ }
}
iptr++;
}

Return to:

Send suggestions and report system problems to the System administrator.