Commit 394c077f authored by Vaclav Brozek's avatar Vaclav Brozek Committed by Commit Bot

Unescape CSV values in CSVPassword

This CL teaches CSVPassword to unescape CSV values.

Bug: 934326
Change-Id: Id99e89b6e84f9b47216e6eac0f735fc4084a9cb9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1698403Reviewed-by: default avatarJan Wilken Dörrie <jdoerrie@chromium.org>
Commit-Queue: Vaclav Brozek <vabr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#682353}
parent a300888e
......@@ -17,6 +17,19 @@ namespace password_manager {
using ::autofill::PasswordForm;
namespace {
// Convert() unescapes a CSV field |str| and converts the result to a 16-bit
// string. |str| is assumed to exclude the outer pair of quotation marks, if
// originally present.
base::string16 Convert(base::StringPiece str) {
std::string str_copy(str);
base::ReplaceSubstringsAfterOffset(&str_copy, 0, "\"\"", "\"");
return base::UTF8ToUTF16(str_copy);
}
} // namespace
CSVPassword::CSVPassword(const ColumnMap& map, base::StringPiece csv_row)
: map_(map), row_(csv_row) {}
......@@ -74,8 +87,8 @@ bool CSVPassword::Parse(PasswordForm* form) const {
? origin.spec()
: origin.GetOrigin().spec();
form->origin = std::move(origin);
form->username_value = base::UTF8ToUTF16(username);
form->password_value = base::UTF8ToUTF16(password);
form->username_value = Convert(username);
form->password_value = Convert(password);
return true;
}
......
......@@ -147,6 +147,16 @@ INSTANTIATE_TEST_SUITE_P(
.Username("the-user")
.Password("pwd")
.Build(),
TestCaseBuilder("Escaped")
.Map({{0, CSVPassword::Label::kOrigin},
{2, CSVPassword::Label::kUsername},
{3, CSVPassword::Label::kPassword}})
.CSV(R"(http://example.org,"a""b","u,+,c","p""")")
.Origin("http://example.org")
.SignonRealm("http://example.org/")
.Username("u,+,c")
.Password("p\"")
.Build(),
TestCaseBuilder("path discarded")
.Map({{2, CSVPassword::Label::kOrigin},
{1, CSVPassword::Label::kUsername},
......
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