Revision f6e5b55a
Von Moritz Bunkus vor mehr als 17 Jahren hinzugefügt
bin/mozilla/common.pl | ||
---|---|---|
9 | 9 |
# |
10 | 10 |
###################################################################### |
11 | 11 |
|
12 |
use Data::Dumper;
|
|
12 |
use YAML;
|
|
13 | 13 |
|
14 | 14 |
use SL::Common; |
15 | 15 |
|
16 | 16 |
sub save_form { |
17 | 17 |
$lxdebug->enter_sub(); |
18 | 18 |
|
19 |
my (@names, @values); |
|
20 |
foreach my $key (keys(%{$form})) { |
|
21 |
push(@names, "\$form->{\"$key\"}"); |
|
22 |
push(@values, $form->{$key}); |
|
23 |
} |
|
24 |
my $dumper = Data::Dumper->new(\@values, \@names); |
|
25 |
$dumper->Indent(0); |
|
26 |
my $old_form = $dumper->Dump(); |
|
19 |
my $yaml = new YAML; |
|
20 |
$yaml->Indent(1); |
|
21 |
my $old_form = $yaml->dump($form); |
|
22 |
$old_form =~ s|!|!!|g; |
|
23 |
$old_form =~ s|\n|!n|g; |
|
24 |
$old_form =~ s|\r|!r|g; |
|
25 |
$lxdebug->message(0, "yeah!???\n\n$old_form\n\n\n"); |
|
27 | 26 |
|
28 | 27 |
$lxdebug->leave_sub(); |
29 | 28 |
|
... | ... | |
36 | 35 |
my ($old_form, $no_delete) = @_; |
37 | 36 |
|
38 | 37 |
map({ delete($form->{$_}); } keys(%{$form})) unless ($no_delete); |
39 |
eval($old_form); |
|
38 |
$old_form =~ s|!r|\r|g; |
|
39 |
$old_form =~ s|!n|\n|g; |
|
40 |
$old_form =~ s|!!|!|g; |
|
41 |
$form = YAML::Load($old_form); |
|
40 | 42 |
|
41 | 43 |
$lxdebug->leave_sub(); |
42 | 44 |
} |
Auch abrufbar als: Unified diff
Benutze das Perl-Modul "YAML", um $form in einen String umzuwandeln und später daraus wieder herzustellen, da YAML im Gegensatz zu "Data::Dumper" ohne Perls "eval()" auskommt, sondern einen sicheren Parser zur Verfügung stellt. Damit kann die serialisierte $form auch über ein Formular vom Benutzer stammen, ohne ein Sicherheitsproblem darzustellen.