diff --git a/include/locale b/include/locale index bec27f6d..ee0a6a0e 100644 --- a/include/locale +++ b/include/locale @@ -3920,7 +3920,8 @@ wstring_convert<_Codecvt, _Elem, _Wide_alloc, _Byte_alloc>:: if (__cvtptr_ != nullptr) { wide_string __ws(2*(__frm_end - __frm), _Elem()); - __ws.resize(__ws.capacity()); + if (__frm != __frm_end) + __ws.resize(__ws.capacity()); codecvt_base::result __r = codecvt_base::ok; state_type __st = __cvtstate_; if (__frm != __frm_end) @@ -3980,7 +3981,8 @@ wstring_convert<_Codecvt, _Elem, _Wide_alloc, _Byte_alloc>:: if (__cvtptr_ != nullptr) { byte_string __bs(2*(__frm_end - __frm), char()); - __bs.resize(__bs.capacity()); + if (__frm != __frm_end) + __bs.resize(__bs.capacity()); codecvt_base::result __r = codecvt_base::ok; state_type __st = __cvtstate_; if (__frm != __frm_end) diff --git a/test/localization/locales/locale.convenience/conversions/conversions.string/from_bytes.pass.cpp b/test/localization/locales/locale.convenience/conversions/conversions.string/from_bytes.pass.cpp index 08d3e185..8705a5f3 100644 --- a/test/localization/locales/locale.convenience/conversions/conversions.string/from_bytes.pass.cpp +++ b/test/localization/locales/locale.convenience/conversions/conversions.string/from_bytes.pass.cpp @@ -33,5 +33,7 @@ int main() assert(ws == L"\x40003"); ws = myconv.from_bytes(bs.data(), bs.data() + bs.size()); assert(ws == L"\x40003"); + ws = myconv.from_bytes(""); + assert(ws.size() == 0); } } diff --git a/test/localization/locales/locale.convenience/conversions/conversions.string/to_bytes.pass.cpp b/test/localization/locales/locale.convenience/conversions/conversions.string/to_bytes.pass.cpp index 4ef59891..7253a18a 100644 --- a/test/localization/locales/locale.convenience/conversions/conversions.string/to_bytes.pass.cpp +++ b/test/localization/locales/locale.convenience/conversions/conversions.string/to_bytes.pass.cpp @@ -33,5 +33,7 @@ int main() assert(bs == "\xF1\x80\x80\x83"); bs = myconv.to_bytes(ws.data(), ws.data() + ws.size()); assert(bs == "\xF1\x80\x80\x83"); + bs = myconv.to_bytes(L""); + assert(bs.size() == 0); } }