OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/websockets/websocket_extension_parser.h" | 5 #include "net/websockets/websocket_extension_parser.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "net/websockets/websocket_extension.h" | 9 #include "net/websockets/websocket_extension.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 "foo; bar=b\\z", // separator in parameter value | 124 "foo; bar=b\\z", // separator in parameter value |
125 "foo; bar=b?z", // separator in parameter value | 125 "foo; bar=b?z", // separator in parameter value |
126 "\"foo\"", // quoted extension name | 126 "\"foo\"", // quoted extension name |
127 "foo; \"bar\"", // quoted parameter name | 127 "foo; \"bar\"", // quoted parameter name |
128 "foo; bar=\"\a2\"", // control in quoted parameter value | 128 "foo; bar=\"\a2\"", // control in quoted parameter value |
129 "foo; bar=\"b@z\"", // separator in quoted parameter value | 129 "foo; bar=\"b@z\"", // separator in quoted parameter value |
130 "foo; bar=\"b\\\\z\"", // separator in quoted parameter value | 130 "foo; bar=\"b\\\\z\"", // separator in quoted parameter value |
131 "foo; bar=\"\"", // quoted empty parameter value | 131 "foo; bar=\"\"", // quoted empty parameter value |
132 "foo; bar=\"baz", // unterminated quoted string | 132 "foo; bar=\"baz", // unterminated quoted string |
133 "foo; bar=\"baz \"", // space in quoted string | 133 "foo; bar=\"baz \"", // space in quoted string |
134 "foo; bar baz", // mising '=' | 134 "foo; bar baz", // missing '=' |
135 "foo; bar - baz", // '-' instead of '=' (note: "foo; bar-baz" is valid). | 135 "foo; bar - baz", // '-' instead of '=' (note: "foo; bar-baz" is valid). |
136 "foo; bar=\r\nbaz", // CRNL not followed by a space | 136 "foo; bar=\r\nbaz", // CRNL not followed by a space |
137 "foo; bar=\r\n baz", // CRNL followed by a space | 137 "foo; bar=\r\n baz", // CRNL followed by a space |
| 138 "f\xFFpp", // 8-bit character in extension name |
| 139 "foo; b\xFFr=baz" // 8-bit character in parameter name |
| 140 "foo; bar=b\xFF" // 8-bit character in parameter value |
| 141 "foo; bar=\"b\xFF\"" // 8-bit character in quoted parameter value |
| 142 "foo; bar=\"baz\\" // ends with backslash |
138 }; | 143 }; |
139 | 144 |
140 for (size_t i = 0; i < arraysize(patterns); ++i) { | 145 for (size_t i = 0; i < arraysize(patterns); ++i) { |
141 WebSocketExtensionParser parser; | 146 WebSocketExtensionParser parser; |
142 EXPECT_FALSE(parser.Parse(patterns[i])); | 147 EXPECT_FALSE(parser.Parse(patterns[i])); |
143 EXPECT_EQ(0U, parser.extensions().size()); | 148 EXPECT_EQ(0U, parser.extensions().size()); |
144 } | 149 } |
145 } | 150 } |
146 | 151 |
147 TEST(WebSocketExtensionParserTest, QuotedParameterValue) { | 152 TEST(WebSocketExtensionParserTest, QuotedParameterValue) { |
148 WebSocketExtensionParser parser; | 153 WebSocketExtensionParser parser; |
149 WebSocketExtension expected("foo"); | 154 WebSocketExtension expected("foo"); |
150 expected.Add(WebSocketExtension::Parameter("bar", "baz")); | 155 expected.Add(WebSocketExtension::Parameter("bar", "baz")); |
151 | 156 |
152 EXPECT_TRUE(parser.Parse("foo; bar = \"ba\\z\" ")); | 157 EXPECT_TRUE(parser.Parse("foo; bar = \"ba\\z\" ")); |
153 | 158 |
154 ASSERT_EQ(1U, parser.extensions().size()); | 159 ASSERT_EQ(1U, parser.extensions().size()); |
155 EXPECT_TRUE(expected.Equals(parser.extensions()[0])); | 160 EXPECT_TRUE(expected.Equals(parser.extensions()[0])); |
156 } | 161 } |
157 | 162 |
| 163 // This is a regression test for crbug.com/647156 |
| 164 TEST(WebSocketExtensionParserTest, InvalidToken) { |
| 165 static const char kInvalidInput[] = "\304;\304!*777\377=\377\254\377"; |
| 166 WebSocketExtensionParser parser; |
| 167 EXPECT_FALSE(parser.Parse(kInvalidInput)); |
| 168 } |
| 169 |
158 } // namespace | 170 } // namespace |
159 | 171 |
160 } // namespace net | 172 } // namespace net |
OLD | NEW |