You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In this example I'm using a filter that is not defined (say a typo)
#!/usr/bin/env perl
use Mojolicious::Lite -signatures;
get '/' => sub ($c) {
$c->render(template => 'index');
};
post '/' => sub ($c) {
$c->validation->optional('test','foo');
return $c->render(text => 'foo');
};
app->start;
__DATA__
@@ index.html.ep
% layout 'default';
<form action="/" method="POST">
<input type="text" name="test" />
<input type="submit" value="Submit" />
</form>
@@ layouts/default.html.ep
<!DOCTYPE html>
<html>
<head><title><%= title %></title></head>
<body><%= content %></body>
</html>
Expected behavior
Ought to be some message in the log that the filter foo does not exist.
Actual behavior
Run under morbo or so and hit the button. This gives us the rather unuseful error
Use of uninitialized value $cb in method lookup at .../Mojolicious/Validator/Validation.pm line 74.
[2023-11-13 16:32:52.60911] [38589] [error] [mSTxzMBC76Is] Can't locate object method "" via package "Mojolicious::Validator::Validation" ...
It comes from this code
for my $cb (map { $self->validator->filters->{$_} } @filters) {
@input = map { $self->$cb($name, $_) } @input;
}
The filters->{$_} part is returning undef of the filter is unknown to the list. And thus we pass on undef as a call back to be used inside the loop. Where it fails the code crashes.
Note sure what the best bethod would be here, but something like
Carp::croak sprintf("Error in filter list for '%s', at least one of these does not exist: '%s'\n",$name,join(',',@filters))
unless defined $cb;
@input = map { $self->$cb($name, $_) } @input;
might at least help to debug something like this.
The text was updated successfully, but these errors were encountered:
Steps to reproduce the behavior
In this example I'm using a filter that is not defined (say a typo)
Expected behavior
Ought to be some message in the log that the filter
foo
does not exist.Actual behavior
Run under
morbo
or so and hit the button. This gives us the rather unuseful errorIt comes from this code
The
filters->{$_}
part is returningundef
of the filter is unknown to the list. And thus we pass onundef
as a call back to be used inside the loop. Where it fails the code crashes.Note sure what the best bethod would be here, but something like
might at least help to debug something like this.
The text was updated successfully, but these errors were encountered: