Commit 852f37ef authored by Eric Orth's avatar Eric Orth Committed by Commit Bot

Update HTTPS parsing to draft-ietf-dnsop-svcb-https-02

Only significant change is to ignore any params received with alias
records.

Bug: 1138620
Change-Id: I5d30127b07a5347c6215077ebfb49d0dc8f19b1e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2515560
Auto-Submit: Eric Orth <ericorth@chromium.org>
Commit-Queue: Dan McArdle <dmcardle@chromium.org>
Reviewed-by: default avatarDan McArdle <dmcardle@chromium.org>
Cr-Commit-Position: refs/heads/master@{#823542}
parent 1256f171
...@@ -195,8 +195,15 @@ std::unique_ptr<AliasFormHttpsRecordRdata> AliasFormHttpsRecordRdata::Parse( ...@@ -195,8 +195,15 @@ std::unique_ptr<AliasFormHttpsRecordRdata> AliasFormHttpsRecordRdata::Parse(
if (!alias_name.has_value()) if (!alias_name.has_value())
return nullptr; return nullptr;
if (reader.remaining() != 0) // Ignore any params.
return nullptr; base::Optional<uint16_t> last_param_key;
while (reader.remaining() > 0) {
uint16_t param_key;
base::StringPiece param_value;
if (!ReadNextServiceParam(last_param_key, reader, &param_key, &param_value))
return nullptr;
last_param_key = param_key;
}
return std::make_unique<AliasFormHttpsRecordRdata>( return std::make_unique<AliasFormHttpsRecordRdata>(
std::move(alias_name).value()); std::move(alias_name).value());
......
...@@ -37,6 +37,28 @@ TEST(HttpsRecordRdataTest, ParsesAlias) { ...@@ -37,6 +37,28 @@ TEST(HttpsRecordRdataTest, ParsesAlias) {
EXPECT_EQ(alias_rdata->alias_name(), "chromium.org"); EXPECT_EQ(alias_rdata->alias_name(), "chromium.org");
} }
TEST(HttpsRecordRdataTest, IgnoreAliasParams) {
const char kRdata[] =
// Priority: 0 for alias record
"\000\000"
// Alias name: chromium.org
"\010chromium\003org\000"
// no-default-alpn
"\000\002\000\000";
std::unique_ptr<HttpsRecordRdata> rdata =
HttpsRecordRdata::Parse(base::StringPiece(kRdata, sizeof(kRdata) - 1));
ASSERT_TRUE(rdata);
AliasFormHttpsRecordRdata expected("chromium.org");
EXPECT_TRUE(rdata->IsEqual(&expected));
EXPECT_TRUE(rdata->IsAlias());
AliasFormHttpsRecordRdata* alias_rdata = rdata->AsAliasForm();
ASSERT_TRUE(alias_rdata);
EXPECT_EQ(alias_rdata->alias_name(), "chromium.org");
}
TEST(HttpsRecordRdataTest, ParsesService) { TEST(HttpsRecordRdataTest, ParsesService) {
const char kRdata[] = const char kRdata[] =
// Priority: 1 // Priority: 1
......
...@@ -189,7 +189,7 @@ static const uint16_t kFlagTC = 0x200; // Truncated - server flag. ...@@ -189,7 +189,7 @@ static const uint16_t kFlagTC = 0x200; // Truncated - server flag.
// SVCB/HTTPS ServiceParamKey // SVCB/HTTPS ServiceParamKey
// //
// IANA registration pending. Values from draft-ietf-dnsop-svcb-https-01. // IANA registration pending. Values from draft-ietf-dnsop-svcb-https-02.
static constexpr uint16_t kHttpsServiceParamKeyMandatory = 0; static constexpr uint16_t kHttpsServiceParamKeyMandatory = 0;
static constexpr uint16_t kHttpsServiceParamKeyAlpn = 1; static constexpr uint16_t kHttpsServiceParamKeyAlpn = 1;
static constexpr uint16_t kHttpsServiceParamKeyNoDefaultAlpn = 2; static constexpr uint16_t kHttpsServiceParamKeyNoDefaultAlpn = 2;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment