Don’t assume `QuicheStringPiece::const_iterator` is a `const char*`
Explicitly convert a `QuicheStringPiece::const_iterator` to `const char*` before trying to initialize a `QuicheStringPiece` with it. This is technically required by the standard – `std::string_view` (to which `QuicheStringPiece` decays in C++17 mode) only has
std::string_view::string_view(const char*, size_t);
std::string_view::string_view(const char*);
and not
std::string_view::string_view(std::string_view::const_iterator);
In practice, this isn’t generally an issue, because most STL implementations use `const char*` as the `string_view` iterator type. MSVC, however, uses a struct for the iterator and therefore requires the explicit conversion.
Thanks go to Yifan Yang <needyyang@google.com>, who identified this issue.
PiperOrigin-RevId: 320031927
Change-Id: If81aff793fac2db7202b5df0d02f86147fc3a658
diff --git a/spdy/core/spdy_alt_svc_wire_format.cc b/spdy/core/spdy_alt_svc_wire_format.cc
index 90dbab8..7f7ca29 100644
--- a/spdy/core/spdy_alt_svc_wire_format.cc
+++ b/spdy/core/spdy_alt_svc_wire_format.cc
@@ -197,7 +197,7 @@
// ... will be stored in |versions| as 0x51303338.
uint32_t quic_version;
if (!SpdyHexDecodeToUInt32(
- quiche::QuicheStringPiece(parameter_value_begin,
+ quiche::QuicheStringPiece(&*parameter_value_begin,
c - parameter_value_begin),
&quic_version) ||
quic_version == 0) {