summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJannis M. Hoffmann <jannis@fehcom.de>2023-03-02 17:34:20 +0100
committerJannis M. Hoffmann <jannis@fehcom.de>2023-03-02 17:34:20 +0100
commit1b09b3a26141c22f37b6ab3ed9af15fcbddd18f8 (patch)
tree78661ebc3a01a2a5255e9d101793e6950a8b5160
parent3e51e5465c9db91494b972d28a96cdae428c12b7 (diff)
Bugfixes
1. correctly read mime parts 2. avoid encoding issues when parsing json form qmauth 3. use 'replace' instead of 'strict' error handling when decoding mails in qmauth.py
-rw-r--r--lib/JWebmail/Controller/Webmail.pm2
-rw-r--r--lib/JWebmail/Model/ReadMails/QMailAuthuser.pm17
-rwxr-xr-xscript/qmauth.py2
3 files changed, 12 insertions, 9 deletions
diff --git a/lib/JWebmail/Controller/Webmail.pm b/lib/JWebmail/Controller/Webmail.pm
index 2f71021..a1d25c3 100644
--- a/lib/JWebmail/Controller/Webmail.pm
+++ b/lib/JWebmail/Controller/Webmail.pm
@@ -211,7 +211,7 @@ sub readmail {
if ($type) {
if ($mail->{head}{mime}{content_maintype} eq 'multipart') {
- my $content = first {$_->{head}{mime}{content_subtype} eq $type} @{ $mail->{body} };
+ my $content = first {$_->{head}{mime}{content_subtype} eq $type} $mail->{body}{parts}->@*;
$self->render(text => $content->{body});
}
elsif ($mail->{head}{mime}{content_subtype} eq $type) {
diff --git a/lib/JWebmail/Model/ReadMails/QMailAuthuser.pm b/lib/JWebmail/Model/ReadMails/QMailAuthuser.pm
index 956c137..a61cf01 100644
--- a/lib/JWebmail/Model/ReadMails/QMailAuthuser.pm
+++ b/lib/JWebmail/Model/ReadMails/QMailAuthuser.pm
@@ -193,7 +193,7 @@ sub execute {
close $writer
or die 'closing write pipe failed';
- binmode $reader, ':encoding(UTF-8)';
+ #binmode $reader, ':encoding(UTF-8)';
my $input = <$reader>;
close $reader
or die 'closing read pipe failed';
@@ -203,12 +203,15 @@ sub execute {
my $resp;
if ($rc == 3 || $rc == 0) {
- eval { $resp = decode_json $input; 1 }
- or $resp = {
- info => "error decoding response",
- response => $input,
- cause => $@,
- return_code => $rc,
+ eval { $resp = decode_json $input if $input; 1 }
+ or do {
+ $resp = {
+ info => "error decoding response",
+ response => $input,
+ cause => $@,
+ return_code => $rc,
+ };
+ $rc = 3;
};
}
elsif ($rc) {
diff --git a/script/qmauth.py b/script/qmauth.py
index 7803483..052b8dd 100755
--- a/script/qmauth.py
+++ b/script/qmauth.py
@@ -202,7 +202,7 @@ def count_mails(f, subfolder):
def _get_body(mail):
if not mail.is_multipart():
if mail.get_content_maintype() == 'text':
- return mail.get_payload(decode=True).decode()
+ return mail.get_payload(decode=True).decode(errors='replace')
else:
return mail.get_payload()