From ae07f91e262675c4b1b9e3bf8ff622a4fadce428 Mon Sep 17 00:00:00 2001 From: Sebastian Riedel Date: Tue, 19 Jan 2016 20:33:23 +0100 Subject: [PATCH] "0" is also a valid subprotocol --- lib/Mojo/Transaction/WebSocket.pm | 4 ++-- t/mojolicious/websocket_lite_app.t | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/Mojo/Transaction/WebSocket.pm b/lib/Mojo/Transaction/WebSocket.pm index 53f40c9f88..e4d0b25956 100644 --- a/lib/Mojo/Transaction/WebSocket.pm +++ b/lib/Mojo/Transaction/WebSocket.pm @@ -136,8 +136,8 @@ sub with_protocols { my $self = shift; my %protos = map { trim($_) => 1 } split ',', - $self->req->headers->sec_websocket_protocol || ''; - return undef unless my $proto = first { $protos{$_} } @_; + $self->req->headers->sec_websocket_protocol // ''; + return undef unless defined(my $proto = first { $protos{$_} } @_); $self->res->headers->sec_websocket_protocol($proto); return $proto; diff --git a/t/mojolicious/websocket_lite_app.t b/t/mojolicious/websocket_lite_app.t index 0862db98d3..390efd6780 100644 --- a/t/mojolicious/websocket_lite_app.t +++ b/t/mojolicious/websocket_lite_app.t @@ -29,7 +29,7 @@ websocket '/no_compression' => sub { websocket '/protocols' => sub { my $c = shift; - $c->send($c->tx->with_protocols('foo', 'bar', 'baz') // 'none'); + $c->send($c->tx->with_protocols('foo', 'bar', 'baz', '0') // 'none'); $c->send($c->tx->protocol // 'none'); }; @@ -225,6 +225,11 @@ $t->websocket_ok('/protocols' => ['baz', 'bar', 'foo']) is $t->tx->protocol, 'foo', 'right protocol'; is $t->tx->res->headers->sec_websocket_protocol, 'foo', 'right "Sec-WebSocket-Protocol" value'; +$t->websocket_ok('/protocols' => ['0'])->message_ok->message_is('0') + ->message_ok->message_is('0')->finish_ok; +is $t->tx->protocol, '0', 'right protocol'; +is $t->tx->res->headers->sec_websocket_protocol, '0', + 'right "Sec-WebSocket-Protocol" value'; $t->websocket_ok('/protocols' => [''])->message_ok->message_is('none') ->message_ok->message_is('none')->finish_ok; is $t->tx->protocol, undef, 'no protocol';