summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/VNDB/Func.pm14
-rw-r--r--lib/VNDB/Handler/Releases.pm3
2 files changed, 11 insertions, 6 deletions
diff --git a/lib/VNDB/Func.pm b/lib/VNDB/Func.pm
index 810fe622..11d442f4 100644
--- a/lib/VNDB/Func.pm
+++ b/lib/VNDB/Func.pm
@@ -95,13 +95,19 @@ sub minage {
}
+# arguments: $filter_string, @allowed_keys
sub fil_parse {
- return { map {
- my($f, $v) = split /-/, $_, 2;
+ my $str = shift;
+ my %keys = map +($_,1), @_;
+ my %r;
+ for (split /\./, $str) {
+ next if !/^([a-z0-9_]+)-([a-zA-Z0-9_~]+)$/ || !$keys{$1};
+ my($f, $v) = ($1, $2);
my @v = split /~/, $v;
s/_([0-9]{2})/$1 > $#fil_escape ? '' : $fil_escape[$1]/eg for(@v);
- $f => @v > 1 ? \@v : @v
- } split /\./, scalar shift };
+ $r{$f} = @v > 1 ? \@v : $v[0]
+ }
+ return \%r;
}
diff --git a/lib/VNDB/Handler/Releases.pm b/lib/VNDB/Handler/Releases.pm
index 63ea0922..36378212 100644
--- a/lib/VNDB/Handler/Releases.pm
+++ b/lib/VNDB/Handler/Releases.pm
@@ -492,8 +492,7 @@ sub browse {
);
return 404 if $f->{_err};
- # TODO: validate the filter string?
- my $fil = fil_parse $f->{fil};
+ my $fil = fil_parse $f->{fil}, qw|type patch freeware doujin date_before date_after minage lang resolution plat med|;
_fil_compat($self, $fil);
$f->{fil} = fil_serialize($fil);