| 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 |