[pmg-devel] [PATCH pmg-api v3 1/8] utils: return perl string from decode_rfc1522
Stoiko Ivanov
s.ivanov at proxmox.com
Wed Nov 23 10:23:27 CET 2022
decode_rfc1522 is a more robust version of decode_mimewords (in
scalar context) - adapt it to return a perlstring, under the
assumption that data is utf-8 encoded (holds true for ascii and
smtputf8 mails)
the try_decode_utf8 helper sub backwards will be used extensively in
later patches and is inspired by commit
43f8112f0bb424f99057106d57d32276d7d422a6 in pve-storage:
We consider that the valid multibyte utf-8 characters do not really
yield sensible combinations of single-byte perl characters (starting
with a byte > 127 - e.g. "£") so if something decodes without error
from utf-8 it will in all likelyhood have been utf-8 to begin with
Signed-off-by: Stoiko Ivanov <s.ivanov at proxmox.com>
---
src/PMG/Utils.pm | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/PMG/Utils.pm b/src/PMG/Utils.pm
index cef232b..cfb8852 100644
--- a/src/PMG/Utils.pm
+++ b/src/PMG/Utils.pm
@@ -1088,6 +1088,7 @@ sub decode_to_html {
return $res;
}
+# assume enc contains utf-8 and mime-encoded data returns a perl-string (with wide characters)
sub decode_rfc1522 {
my ($enc) = @_;
@@ -1102,7 +1103,7 @@ sub decode_rfc1522 {
if ($cs) {
$res .= decode($cs, $d);
} else {
- $res .= $d;
+ $res .= try_decode_utf8($d);
}
}
}
@@ -1542,4 +1543,9 @@ sub get_existing_object_id {
return;
}
+sub try_decode_utf8 {
+ my ($data) = @_;
+ return eval { decode('UTF-8', $data, 1) } // $data;
+}
+
1;
--
2.30.2
More information about the pmg-devel
mailing list