From b83f4c731d8f9af962fd42e2f106ef6ac87abb39 Mon Sep 17 00:00:00 2001 From: Scott Graham Date: Tue, 13 Feb 2018 12:09:33 -0800 Subject: [PATCH] Let UUID::InitializeFromString accept StringPiece16 too Split out of crrev.com/c/689745 by jperaza, with a simple test added. It is useful for this to be an overload instead of a separate signature so that code that extracts a UUID string out of a filename can treat it generically between Windows and non-Windows. Bug: crashpad:196, crashpad:206 Change-Id: I0d7d84a93d9526d1aae8839179dfe903acca091b Reviewed-on: https://chromium-review.googlesource.com/916885 Commit-Queue: Scott Graham Reviewed-by: Mark Mentovai --- util/misc/uuid.cc | 4 ++++ util/misc/uuid.h | 1 + util/misc/uuid_test.cc | 25 +++++++++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/util/misc/uuid.cc b/util/misc/uuid.cc index 92fba760..ffd49708 100644 --- a/util/misc/uuid.cc +++ b/util/misc/uuid.cc @@ -84,6 +84,10 @@ bool UUID::InitializeFromString(const base::StringPiece& string) { return true; } +bool UUID::InitializeFromString(const base::StringPiece16& string) { + return InitializeFromString(UTF16ToUTF8(string)); +} + bool UUID::InitializeWithNew() { #if defined(OS_MACOSX) uuid_t uuid; diff --git a/util/misc/uuid.h b/util/misc/uuid.h index 4e5884e2..af801222 100644 --- a/util/misc/uuid.h +++ b/util/misc/uuid.h @@ -63,6 +63,7 @@ struct UUID { //! been initialized with the data. `false` if the string could not be //! parsed, with the object state untouched. bool InitializeFromString(const base::StringPiece& string); + bool InitializeFromString(const base::StringPiece16& string); //! \brief Initializes the %UUID using a standard system facility to generate //! the value. diff --git a/util/misc/uuid_test.cc b/util/misc/uuid_test.cc index 72b8216b..c05c5c1b 100644 --- a/util/misc/uuid_test.cc +++ b/util/misc/uuid_test.cc @@ -214,6 +214,31 @@ TEST(UUID, FromString) { // Mixed case. uuid.InitializeFromString("5762C15D-50b5-4171-a2e9-7429C9EC6CAB"); EXPECT_EQ(uuid.ToString(), "5762c15d-50b5-4171-a2e9-7429c9ec6cab"); + + // Test accepting a StringPiece16. + // clang-format off + static constexpr base::char16 kChar16UUID[] = { + 'f', '3', '2', 'e', '5', 'b', 'd', 'c', '-', + '2', '6', '8', '1', '-', + '4', 'c', '7', '3', '-', + 'a', '4', 'e', '6', '-', + '3', '3', '3', 'f', 'f', 'd', '3', '3', 'b', '3', '3', '3', + }; + // clang-format on + EXPECT_TRUE(uuid.InitializeFromString( + base::StringPiece16(kChar16UUID, arraysize(kChar16UUID)))); + EXPECT_EQ(uuid.ToString(), "f32e5bdc-2681-4c73-a4e6-333ffd33b333"); + +#if defined(OS_WIN) + // Test accepting a StringPiece16 via L"" literals on Windows. + EXPECT_TRUE( + uuid.InitializeFromString(L"F32E5BDC-2681-4C73-A4E6-444FFD44B444")); + EXPECT_EQ(uuid.ToString(), "f32e5bdc-2681-4c73-a4e6-444ffd44b444"); + + EXPECT_TRUE( + uuid.InitializeFromString(L"5762C15D-50b5-4171-a2e9-5555C5EC5CAB")); + EXPECT_EQ(uuid.ToString(), "5762c15d-50b5-4171-a2e9-5555c5ec5cab"); +#endif // OS_WIN } #if defined(OS_WIN)