Commit 96caaa27a629f63145439bf4391bf55b498d7615

Restore pre-5.815 behaviour of returning "400 Bad Request" responses [RT#39694]

It's more friendly to the user if we trap errors this way as these
errors might be caused by bad user data and not really program logic
errors.
  
210210sub prepare_request
211211{
212212 my($self, $request) = @_;
213 # sanity check the request passed in
214 if (defined $request) {
215 if (ref $request) {
216 Carp::croak("You need a request object, not a " . ref($request) . " object")
217 if ref($request) eq 'ARRAY' or ref($request) eq 'HASH' or
218 !$request->can('method') or !$request->can('uri');
219 }
220 else {
221 Carp::croak("You need a request object, not '$request'");
222 }
223 }
224 else {
225 Carp::croak("No request object passed in");
226 }
227 Carp::croak("Bad request: Method missing") unless $request->method;
213 die "Method missing" unless $request->method;
228214 my $url = $request->url;
229 Carp::croak("Bad request: URL missing") unless $url;
230 Carp::croak("Bad request: URL must be absolute") unless $url->scheme;
215 die "URL missing" unless $url;
216 die "URL must be absolute" unless $url->scheme;
231217
232218 $self->run_handlers("request_preprepare", $request);
233219
239239sub simple_request
240240{
241241 my($self, $request, $arg, $size) = @_;
242 $request = $self->prepare_request($request);
242
243 # sanity check the request passed in
244 if (defined $request) {
245 if (ref $request) {
246 Carp::croak("You need a request object, not a " . ref($request) . " object")
247 if ref($request) eq 'ARRAY' or ref($request) eq 'HASH' or
248 !$request->can('method') or !$request->can('uri');
249 }
250 else {
251 Carp::croak("You need a request object, not '$request'");
252 }
253 }
254 else {
255 Carp::croak("No request object passed in");
256 }
257
258 eval {
259 $request = $self->prepare_request($request);
260 };
261 if ($@) {
262 $@ =~ s/ at .* line \d+.*//s; # remove file/line number
263 return _new_response($request, &HTTP::Status::RC_BAD_REQUEST, $@);
264 }
243265 return $self->send_request($request, $arg, $size);
244266}
245267
13621362The method can assign a new request object to $_[0] to replace the
13631363request that is sent fully.
13641364
1365The return value from the callback is ignored. Exceptions are
1366not trapped and are propagated to the outer request method.
1365The return value from the callback is ignored. If an exceptions is
1366raised it will abort the request and make the request method return a
1367"400 Bad request" response.
13671368
13681369=item request_send => sub { my($request, $ua, $h) = @_; ... }
13691370