aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <smcv@debian.org>2014-09-12 21:23:29 +0100
committerSimon McVittie <smcv@debian.org>2014-09-12 21:23:29 +0100
commitab876a99476429b3f2cda9898db9e4d0afe354a9 (patch)
tree355ac610a482f0ac7d95fbc0dbc681a3a4c7bbe4
parenta94dd618cc4f6c4897f499a6d19ed293859ef557 (diff)
parentfeb21ebfacb341fc34244e1c9b8557fd81d1dfc1 (diff)
downloadikiwiki-ab876a99476429b3f2cda9898db9e4d0afe354a9.tar
ikiwiki-ab876a99476429b3f2cda9898db9e4d0afe354a9.tar.gz
Merge branch 'ready/anarcat/safe_unicode'
-rw-r--r--IkiWiki/CGI.pm14
1 files changed, 13 insertions, 1 deletions
diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm
index c0d8f598b..cb83319e6 100644
--- a/IkiWiki/CGI.pm
+++ b/IkiWiki/CGI.pm
@@ -110,11 +110,23 @@ sub decode_cgi_utf8 ($) {
}
}
+sub safe_decode_utf8 ($) {
+ my $octets = shift;
+ # call decode_utf8 on >= 5.20 only if it's not already decoded,
+ # otherwise it balks, on < 5.20, always call it
+ if ($] < 5.02 || !Encode::is_utf8($octets)) {
+ return decode_utf8($octets);
+ }
+ else {
+ return $octets;
+ }
+}
+
sub decode_form_utf8 ($) {
if ($] >= 5.01) {
my $form = shift;
foreach my $f ($form->field) {
- my @value=map { decode_utf8($_) } $form->field($f);
+ my @value=map { safe_decode_utf8($_) } $form->field($f);
$form->field(name => $f,
value => \@value,
force => 1,