[DevTools] Roll inspector_protocol
to rev 0ffa9dd64489868aad8fc40988558725eabd656e.
This brings in the fix for AppendString8EntryToCBORMapTmpl.
Change-Id: Iad4e450c5e7b998d311596096c0c5e6145e6d4a3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1574367
Reviewed-by: Andrey Kosyakov <caseq@chromium.org>
Commit-Queue: Johannes Henkel <johannes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#652441}
diff --git a/third_party/inspector_protocol/README.chromium b/third_party/inspector_protocol/README.chromium
index 4faba6d..44f8cec 100644
--- a/third_party/inspector_protocol/README.chromium
+++ b/third_party/inspector_protocol/README.chromium
@@ -2,7 +2,7 @@
Short Name: inspector_protocol
URL: https://chromium.googlesource.com/deps/inspector_protocol/
Version: 0
-Revision: 34bdcd1fb46ec80fb22908ee03fdb7cacf2575ac
+Revision: 0ffa9dd64489868aad8fc40988558725eabd656e
License: BSD
License File: LICENSE
Security Critical: no
diff --git a/third_party/inspector_protocol/encoding/encoding.cc b/third_party/inspector_protocol/encoding/encoding.cc
index 211deff..d3e7f0d 100644
--- a/third_party/inspector_protocol/encoding/encoding.cc
+++ b/third_party/inspector_protocol/encoding/encoding.cc
@@ -977,6 +977,8 @@
Status AppendString8EntryToCBORMapTmpl(span<uint8_t> string8_key,
span<uint8_t> string8_value,
C* cbor) {
+ // Careful below: Don't compare (*cbor)[idx] with a uint8_t, since
+ // it could be a char (signed!). Instead, use bytes.
span<uint8_t> bytes(reinterpret_cast<const uint8_t*>(cbor->data()),
cbor->size());
CBORTokenizer tokenizer(bytes);
@@ -991,7 +993,7 @@
if (envelope_size == 0 ||
(tokenizer.GetEnvelopeContents()[0] != EncodeIndefiniteLengthMapStart()))
return Status(Error::CBOR_MAP_START_EXPECTED, kEncodedEnvelopeHeaderSize);
- if (cbor->back() != EncodeStop())
+ if (bytes[bytes.size() - 1] != EncodeStop())
return Status(Error::CBOR_MAP_STOP_EXPECTED, cbor->size() - 1);
cbor->pop_back();
EncodeString8(string8_key, cbor);
diff --git a/third_party/inspector_protocol/encoding/encoding_test.cc b/third_party/inspector_protocol/encoding/encoding_test.cc
index e48d359..a0fe95e 100644
--- a/third_party/inspector_protocol/encoding/encoding_test.cc
+++ b/third_party/inspector_protocol/encoding/encoding_test.cc
@@ -1132,7 +1132,13 @@
// cbor::AppendString8EntryToMap - for limited in-place editing of messages
// =============================================================================
-TEST(AppendString8EntryToMapTest, AppendsEntrySuccessfully) {
+template <typename T>
+class AppendString8EntryToMapTest : public ::testing::Test {};
+
+using ContainerTestTypes = ::testing::Types<std::vector<uint8_t>, std::string>;
+TYPED_TEST_SUITE(AppendString8EntryToMapTest, ContainerTestTypes);
+
+TYPED_TEST(AppendString8EntryToMapTest, AppendsEntrySuccessfully) {
constexpr uint8_t kPayloadLen = 12;
std::vector<uint8_t> bytes = {0xd8, 0x5a, 0, 0, 0, kPayloadLen, // envelope
0xbf}; // map start
@@ -1142,20 +1148,22 @@
bytes.push_back(0xff); // A perfectly fine cbor message.
EXPECT_EQ(kPayloadLen, bytes.size() - pos_before_payload);
+ TypeParam msg(bytes.begin(), bytes.end());
+
Status status =
- AppendString8EntryToCBORMap(SpanFrom("foo"), SpanFrom("bar"), &bytes);
+ AppendString8EntryToCBORMap(SpanFrom("foo"), SpanFrom("bar"), &msg);
EXPECT_EQ(Error::OK, status.error);
EXPECT_EQ(-1, status.pos);
std::string out;
std::unique_ptr<StreamingParserHandler> json_writer =
NewJSONEncoder(&GetTestPlatform(), &out, &status);
- ParseCBOR(span<uint8_t>(bytes.data(), bytes.size()), json_writer.get());
+ ParseCBOR(SpanFrom(msg), json_writer.get());
EXPECT_EQ("{\"key\":\"value\",\"foo\":\"bar\"}", out);
EXPECT_EQ(Error::OK, status.error);
EXPECT_EQ(-1, status.pos);
}
-TEST(AppendString8EntryToMapTest, AppendThreeEntries) {
+TYPED_TEST(AppendString8EntryToMapTest, AppendThreeEntries) {
std::vector<uint8_t> encoded = {
0xd8, 0x5a, 0, 0, 0, 2, EncodeIndefiniteLengthMapStart(), EncodeStop()};
EXPECT_EQ(Error::OK, AppendString8EntryToCBORMap(SpanFrom("key"),
@@ -1167,51 +1175,53 @@
EXPECT_EQ(Error::OK, AppendString8EntryToCBORMap(SpanFrom("key2"),
SpanFrom("value2"), &encoded)
.error);
-
+ TypeParam msg(encoded.begin(), encoded.end());
std::string out;
Status status;
std::unique_ptr<StreamingParserHandler> json_writer =
NewJSONEncoder(&GetTestPlatform(), &out, &status);
- ParseCBOR(SpanFrom(encoded), json_writer.get());
+ ParseCBOR(SpanFrom(msg), json_writer.get());
EXPECT_EQ("{\"key\":\"value\",\"key1\":\"value1\",\"key2\":\"value2\"}", out);
EXPECT_EQ(Error::OK, status.error);
EXPECT_EQ(-1, status.pos);
}
-TEST(AppendString8EntryToMapTest, MapStartExpected_Error) {
+TYPED_TEST(AppendString8EntryToMapTest, MapStartExpected_Error) {
std::vector<uint8_t> bytes = {
0xd8, 0x5a, 0, 0, 0, 1, EncodeIndefiniteLengthArrayStart()};
-
+ TypeParam msg(bytes.begin(), bytes.end());
Status status =
- AppendString8EntryToCBORMap(SpanFrom("key"), SpanFrom("value"), &bytes);
+ AppendString8EntryToCBORMap(SpanFrom("key"), SpanFrom("value"), &msg);
EXPECT_EQ(Error::CBOR_MAP_START_EXPECTED, status.error);
EXPECT_EQ(6, status.pos);
}
-TEST(AppendString8EntryToMapTest, MapStopExpected_Error) {
+TYPED_TEST(AppendString8EntryToMapTest, MapStopExpected_Error) {
std::vector<uint8_t> bytes = {
0xd8, 0x5a, 0, 0, 0, 2, EncodeIndefiniteLengthMapStart(), 42};
-
+ TypeParam msg(bytes.begin(), bytes.end());
Status status =
- AppendString8EntryToCBORMap(SpanFrom("key"), SpanFrom("value"), &bytes);
+ AppendString8EntryToCBORMap(SpanFrom("key"), SpanFrom("value"), &msg);
EXPECT_EQ(Error::CBOR_MAP_STOP_EXPECTED, status.error);
EXPECT_EQ(7, status.pos);
}
-TEST(AppendString8EntryToMapTest, InvalidEnvelope_Error) {
+TYPED_TEST(AppendString8EntryToMapTest, InvalidEnvelope_Error) {
{ // Second byte is wrong.
std::vector<uint8_t> bytes = {
0x5a, 0, 0, 0, 2, EncodeIndefiniteLengthMapStart(), EncodeStop(), 0};
+ TypeParam msg(bytes.begin(), bytes.end());
Status status =
- AppendString8EntryToCBORMap(SpanFrom("key"), SpanFrom("value"), &bytes);
+ AppendString8EntryToCBORMap(SpanFrom("key"), SpanFrom("value"), &msg);
EXPECT_EQ(Error::CBOR_INVALID_ENVELOPE, status.error);
EXPECT_EQ(0, status.pos);
}
{ // Second byte is wrong.
std::vector<uint8_t> bytes = {
0xd8, 0x7a, 0, 0, 0, 2, EncodeIndefiniteLengthMapStart(), EncodeStop()};
+ TypeParam msg(bytes.begin(), bytes.end());
Status status =
- AppendString8EntryToCBORMap(SpanFrom("key"), SpanFrom("value"), &bytes);
+ AppendString8EntryToCBORMap(SpanFrom("key"), SpanFrom("value"), &msg);
EXPECT_EQ(Error::CBOR_INVALID_ENVELOPE, status.error);
EXPECT_EQ(0, status.pos);
}
@@ -1219,8 +1229,9 @@
std::vector<uint8_t> bytes = {
0xd8, 0x5a, 0, 0, 0, 3, EncodeIndefiniteLengthMapStart(), EncodeStop(),
};
+ TypeParam msg(bytes.begin(), bytes.end());
Status status =
- AppendString8EntryToCBORMap(SpanFrom("key"), SpanFrom("value"), &bytes);
+ AppendString8EntryToCBORMap(SpanFrom("key"), SpanFrom("value"), &msg);
EXPECT_EQ(Error::CBOR_INVALID_ENVELOPE, status.error);
EXPECT_EQ(0, status.pos);
}
@@ -1228,8 +1239,9 @@
std::vector<uint8_t> bytes = {
0xd8, 0x5a, 0, 0, 0, 1, EncodeIndefiniteLengthMapStart(), EncodeStop(),
};
+ TypeParam msg(bytes.begin(), bytes.end());
Status status =
- AppendString8EntryToCBORMap(SpanFrom("key"), SpanFrom("value"), &bytes);
+ AppendString8EntryToCBORMap(SpanFrom("key"), SpanFrom("value"), &msg);
EXPECT_EQ(Error::CBOR_INVALID_ENVELOPE, status.error);
EXPECT_EQ(0, status.pos);
}
diff --git a/third_party/inspector_protocol/lib/encoding_cpp.template b/third_party/inspector_protocol/lib/encoding_cpp.template
index 9aa164a..f66a804 100644
--- a/third_party/inspector_protocol/lib/encoding_cpp.template
+++ b/third_party/inspector_protocol/lib/encoding_cpp.template
@@ -984,6 +984,8 @@
Status AppendString8EntryToCBORMapTmpl(span<uint8_t> string8_key,
span<uint8_t> string8_value,
C* cbor) {
+ // Careful below: Don't compare (*cbor)[idx] with a uint8_t, since
+ // it could be a char (signed!). Instead, use bytes.
span<uint8_t> bytes(reinterpret_cast<const uint8_t*>(cbor->data()),
cbor->size());
CBORTokenizer tokenizer(bytes);
@@ -998,7 +1000,7 @@
if (envelope_size == 0 ||
(tokenizer.GetEnvelopeContents()[0] != EncodeIndefiniteLengthMapStart()))
return Status(Error::CBOR_MAP_START_EXPECTED, kEncodedEnvelopeHeaderSize);
- if (cbor->back() != EncodeStop())
+ if (bytes[bytes.size() - 1] != EncodeStop())
return Status(Error::CBOR_MAP_STOP_EXPECTED, cbor->size() - 1);
cbor->pop_back();
EncodeString8(string8_key, cbor);