Details
-
Bug
-
Status: Resolved
-
Critical
-
Resolution: Fixed
-
4.1.3, 4.1.4, 4.2.0
-
None
-
gcc version 4.1.1 20070105 (Red Hat 4.1.1-51)
-
Incorrect Behavior
Description
When compiled with gcc 4.1.1 on Linux the program below runs successfully to completion as it should. When compiled with stdcxx the facet returns a to_next value that is greater than the number of internal (wchar_t) characters actually produced by the conversion and consequently the program aborts.
$ cat t.cpp && make t && ./t #include <cassert> #include <cwchar> #include <locale> int main () { const std::locale utf8 ("en_US.UTF-8"); typedef std::codecvt<wchar_t, char, std::mbstate_t> UTF8_Cvt; const UTF8_Cvt &cvt = std::use_facet<UTF8_Cvt>(utf8); const char src[] = "abc"; wchar_t dst [2] = { L'\0' }; const char* from_next; wchar_t* to_next; std::mbstate_t state = std::mbstate_t (); const std::codecvt_base::result res = cvt.in (state, src, src + 1, from_next, dst, dst + 2, to_next); assert (1 == from_next - src); assert (1 == to_next - dst); assert ('a' == dst [0]); } gcc -c -I/home/mbrown/stdcxx/include/ansi -D_RWSTDDEBUG -I/home/mbrown/stdcxx/include -I/build/mbrown/stdcxx-gcc-4.1.1-11S/include -I/home/mbrown/stdcxx/examples/include -pedantic -nostdinc++ -g -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long -Wcast-align t.cpp t.cpp: In function 'int main()': t.cpp:21: warning: unused variable 'res' gcc t.o -o t -L/build/mbrown/stdcxx-gcc-4.1.1-11S/lib -lstd11S -lsupc++ -lm t: t.cpp:26: int main(): Assertion `1 == from_next - src' failed. Aborted
Attachments
Attachments
Issue Links
- is depended upon by
-
STDCXX-333 [gcc 3.2.3/Linux] std::wfilebuf extracts more than 1 character from a 1 byte file
- Closed