sub printheader ($) {
my $session=shift;
- if ($ENV{HTTPS} || $config{sslcookie}) {
+ if (($ENV{HTTPS} && lc $ENV{HTTPS} ne "off") || $config{sslcookie}) {
print $session->header(-charset => 'utf-8',
-cookie => $session->cookie(-httponly => 1, -secure => 1));
}
title => $title,
wikiname => $config{wikiname},
content => $content,
- baseurl => urlabs(urlto(undef), $topurl),
+ baseurl => urlabs(baseurl(), $topurl),
html5 => $config{html5},
%params,
);
}
}
+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,
if (! defined $session->param("name") ||
! userinfo_get($session->param("name"), "regdate")) {
- $session->param(postsignin => $ENV{QUERY_STRING});
+ $session->param(postsignin => $q->query_string);
cgi_signin($q, $session);
cgi_savesession($session);
exit;
{ FileName => "$config{wikistatedir}/sessions.db" })
};
if (! $session || $@) {
- error($@." ".CGI::Session->errstr());
+ my $error = $@;
+ error($error." ".CGI::Session->errstr());
}
umask($oldmask);
# userinfo db.
if (! userinfo_get($session->param("name"), "regdate")) {
userinfo_setall($session->param("name"), {
- email => "",
+ email => defined $session->param("email") ? $session->param("email") : "",
password => "",
regdate => time,
}) || error("failed adding user");