diff --git a/libcxx/include/locale b/libcxx/include/locale index 5d59022c95cc..71912905f171 100644 --- a/libcxx/include/locale +++ b/libcxx/include/locale @@ -1180,11 +1180,11 @@ num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e, break; } // Stage 3 - __a[sizeof(__a)-1] = 0; + __buf.resize(__a_end - __a); #ifdef _LIBCPP_LOCALE__L_EXTENSIONS - if (sscanf_l(__a, _LIBCPP_GET_C_LOCALE, "%p", &__v) != 1) + if (sscanf_l(__buf.c_str(), _LIBCPP_GET_C_LOCALE, "%p", &__v) != 1) #else - if (__sscanf_l(__a, __cloc(), "%p", &__v) != 1) + if (__sscanf_l(__buf.c_str(), __cloc(), "%p", &__v) != 1) #endif __err = ios_base::failbit; // EOF checked diff --git a/libcxx/test/input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/pointer.pass.cpp b/libcxx/test/input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/pointer.pass.cpp index 5eda96fe6e67..52b35666424a 100644 --- a/libcxx/test/input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/pointer.pass.cpp +++ b/libcxx/test/input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/pointer.pass.cpp @@ -76,4 +76,22 @@ int main() assert(!is.eof()); assert(!is.fail()); } + { + testbuf sb("12345678"); + std::istream is(&sb); + void* n = 0; + is >> n; + assert(n == (void*)0x12345678); + assert( is.eof()); + assert(!is.fail()); + } + { + testbuf sb(L"12345678"); + std::wistream is(&sb); + void* n = 0; + is >> n; + assert(n == (void*)0x12345678); + assert( is.eof()); + assert(!is.fail()); + } }