diff options
-rw-r--r-- | core/fxcrt/bytestring.h | 8 | ||||
-rw-r--r-- | core/fxcrt/bytestring_unittest.cpp | 17 | ||||
-rw-r--r-- | core/fxcrt/widestring.h | 5 | ||||
-rw-r--r-- | core/fxcrt/widestring_unittest.cpp | 6 |
4 files changed, 30 insertions, 6 deletions
diff --git a/core/fxcrt/bytestring.h b/core/fxcrt/bytestring.h index 247238573d..99b87b1d4c 100644 --- a/core/fxcrt/bytestring.h +++ b/core/fxcrt/bytestring.h @@ -87,9 +87,11 @@ class ByteString { // Explicit conversion to span. // Note: Any subsequent modification of |this| will invalidate the result. pdfium::span<const char> AsSpan() const { - return m_pData ? pdfium::span<const char>(m_pData->m_String, - m_pData->m_nDataLength) - : pdfium::span<const char>(); + return pdfium::make_span(m_pData ? m_pData->m_String : nullptr, + GetLength()); + } + pdfium::span<const uint8_t> AsRawSpan() const { + return pdfium::make_span(raw_str(), GetLength()); } // Note: Any subsequent modification of |this| will invalidate iterators. diff --git a/core/fxcrt/bytestring_unittest.cpp b/core/fxcrt/bytestring_unittest.cpp index d030535edd..ed3f375434 100644 --- a/core/fxcrt/bytestring_unittest.cpp +++ b/core/fxcrt/bytestring_unittest.cpp @@ -27,6 +27,10 @@ TEST(ByteString, ElementAccess) { EXPECT_EQ(3u, abc_span.size()); EXPECT_EQ(0, memcmp(abc_span.data(), "abc", 3)); + pdfium::span<const uint8_t> abc_raw_span = abc.AsRawSpan(); + EXPECT_EQ(3u, abc_raw_span.size()); + EXPECT_EQ(0, memcmp(abc_raw_span.data(), "abc", 3)); + ByteString mutable_abc = abc; EXPECT_EQ(abc.c_str(), mutable_abc.c_str()); EXPECT_EQ('a', mutable_abc[0]); @@ -1527,8 +1531,21 @@ TEST(ByteString, Empty) { ByteString empty_str; EXPECT_TRUE(empty_str.IsEmpty()); EXPECT_EQ(0u, empty_str.GetLength()); + const char* cstr = empty_str.c_str(); + EXPECT_NE(nullptr, cstr); EXPECT_EQ(0u, strlen(cstr)); + + const uint8_t* rstr = empty_str.raw_str(); + EXPECT_EQ(nullptr, rstr); + + pdfium::span<const char> cspan = empty_str.AsSpan(); + EXPECT_TRUE(cspan.empty()); + EXPECT_EQ(nullptr, cspan.data()); + + pdfium::span<const uint8_t> rspan = empty_str.AsRawSpan(); + EXPECT_TRUE(rspan.empty()); + EXPECT_EQ(nullptr, rspan.data()); } TEST(ByteString, InitializerList) { diff --git a/core/fxcrt/widestring.h b/core/fxcrt/widestring.h index b668b0292c..4b097c4430 100644 --- a/core/fxcrt/widestring.h +++ b/core/fxcrt/widestring.h @@ -82,9 +82,8 @@ class WideString { // Explicit conversion to span. // Note: Any subsequent modification of |this| will invalidate the result. pdfium::span<const wchar_t> AsSpan() const { - return m_pData ? pdfium::span<const wchar_t>(m_pData->m_String, - m_pData->m_nDataLength) - : pdfium::span<const wchar_t>(); + return pdfium::make_span(m_pData ? m_pData->m_String : nullptr, + GetLength()); } // Note: Any subsequent modification of |this| will invalidate iterators. diff --git a/core/fxcrt/widestring_unittest.cpp b/core/fxcrt/widestring_unittest.cpp index ec0a55fc1e..4572305530 100644 --- a/core/fxcrt/widestring_unittest.cpp +++ b/core/fxcrt/widestring_unittest.cpp @@ -1353,8 +1353,14 @@ TEST(WideString, Empty) { WideString empty_str; EXPECT_TRUE(empty_str.IsEmpty()); EXPECT_EQ(0u, empty_str.GetLength()); + const wchar_t* cstr = empty_str.c_str(); + EXPECT_NE(nullptr, cstr); EXPECT_EQ(0u, wcslen(cstr)); + + pdfium::span<const wchar_t> cspan = empty_str.AsSpan(); + EXPECT_TRUE(cspan.empty()); + EXPECT_EQ(nullptr, cspan.data()); } TEST(CFX_WidString, InitializerList) { |