[jira] Updated: (STDCXX-250) std::operator(istream, string) fails to set failbit after it extracts 0 characters
[ https://issues.apache.org/jira/browse/STDCXX-250?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Farid Zaripov updated STDCXX-250: - Component/s: (was: 27. Input/Output) 21. Strings Component changed to 21.strings (the opertator(istream, string) is related to 21.string.io part of the standard). std::operator(istream, string) fails to set failbit after it extracts 0 characters -- Key: STDCXX-250 URL: https://issues.apache.org/jira/browse/STDCXX-250 Project: C++ Standard Library Issue Type: Bug Components: 21. Strings Affects Versions: 4.1.2, 4.1.3 Environment: all Reporter: Martin Sebor Assignee: Farid Zaripov Priority: Minor Fix For: 4.2.1 Attachments: istream.cc.diff 21.3.7.9, p3 says about the string extractor: If the function extracts no characters, it calls is.setstate(ios::failbit), which may throw ios_base::failure (27.4.4.3). The test program below shows that in unbuffered mode stdcxx fails to do so when an exception is thrown during the third call to underflow(). $ cat v.cpp make v ./v #include cassert #include cstdio #include istream #include string int main () { struct: std::streambuf { int_type underflow () { static int i = 0; // i == 0: sgect() invoked from sentry ctor // i == 1: sgetc() invoked from operator() // i == 2: sbumpc() invoked from operator() return 1 i++ ? throw i : 'x'; } } buf; std::istream is (buf); std::string s; is s; std::printf (state = %c%c%c, string = \%s\ (length %u)\n, is.rdstate () is.badbit ? 'B' : '-', is.rdstate () is.eofbit ? 'E' : '-', is.rdstate () is.failbit ? 'F' : '-', s.c_str (), s.size ()); assert (x == s); assert ((is.failbit | is.badbit) == is.rdstate ()); } gcc -c -I/build/sebor/dev/stdlib/include/ansi -D_RWSTDDEBUG -pthreads -D_RWSTD_USE_CONFIG -I/build/sebor/dev/stdlib/include -I/build/sebor/gcc-4.1.0-15s/include -I/build/sebor/dev/stdlib/../rwtest -I/build/sebor/dev/stdlib/../rwtest/include -I/build/sebor/dev/stdlib/tests/include -pedantic -nostdinc++ -g -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long v.cpp gcc v.o -o v -L/build/sebor/gcc-4.1.0-15s/rwtest -lrwtest15s -pthreads -L/build/sebor/gcc-4.1.0-15s/lib -lstd15s -lsupc++ -lm state = B--, string = x (length 1) Assertion failed: (is.failbit | is.badbit) == is.rdstate (), file v.cpp, line 30 Abort (core dumped) -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.
[jira] Updated: (STDCXX-250) std::operator(istream, string) fails to set failbit after it extracts 0 characters
[ https://issues.apache.org/jira/browse/STDCXX-250?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Farid Zaripov updated STDCXX-250: - Severity: Incorrect Behavior Patch Info: [Patch Available] Fix Version/s: 4.2.1 std::operator(istream, string) fails to set failbit after it extracts 0 characters -- Key: STDCXX-250 URL: https://issues.apache.org/jira/browse/STDCXX-250 Project: C++ Standard Library Issue Type: Bug Components: 27. Input/Output Affects Versions: 4.1.2, 4.1.3 Environment: all Reporter: Martin Sebor Priority: Minor Fix For: 4.2.1 Attachments: istream.cc.diff 21.3.7.9, p3 says about the string extractor: If the function extracts no characters, it calls is.setstate(ios::failbit), which may throw ios_base::failure (27.4.4.3). The test program below shows that in unbuffered mode stdcxx fails to do so when an exception is thrown during the third call to underflow(). $ cat v.cpp make v ./v #include cassert #include cstdio #include istream #include string int main () { struct: std::streambuf { int_type underflow () { static int i = 0; // i == 0: sgect() invoked from sentry ctor // i == 1: sgetc() invoked from operator() // i == 2: sbumpc() invoked from operator() return 1 i++ ? throw i : 'x'; } } buf; std::istream is (buf); std::string s; is s; std::printf (state = %c%c%c, string = \%s\ (length %u)\n, is.rdstate () is.badbit ? 'B' : '-', is.rdstate () is.eofbit ? 'E' : '-', is.rdstate () is.failbit ? 'F' : '-', s.c_str (), s.size ()); assert (x == s); assert ((is.failbit | is.badbit) == is.rdstate ()); } gcc -c -I/build/sebor/dev/stdlib/include/ansi -D_RWSTDDEBUG -pthreads -D_RWSTD_USE_CONFIG -I/build/sebor/dev/stdlib/include -I/build/sebor/gcc-4.1.0-15s/include -I/build/sebor/dev/stdlib/../rwtest -I/build/sebor/dev/stdlib/../rwtest/include -I/build/sebor/dev/stdlib/tests/include -pedantic -nostdinc++ -g -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long v.cpp gcc v.o -o v -L/build/sebor/gcc-4.1.0-15s/rwtest -lrwtest15s -pthreads -L/build/sebor/gcc-4.1.0-15s/lib -lstd15s -lsupc++ -lm state = B--, string = x (length 1) Assertion failed: (is.failbit | is.badbit) == is.rdstate (), file v.cpp, line 30 Abort (core dumped) -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.
[jira] Updated: (STDCXX-250) std::operator(istream, string) fails to set failbit after it extracts 0 characters
[ https://issues.apache.org/jira/browse/STDCXX-250?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Farid Zaripov updated STDCXX-250: - Attachment: istream.cc.diff The patch is attached. std::operator(istream, string) fails to set failbit after it extracts 0 characters -- Key: STDCXX-250 URL: https://issues.apache.org/jira/browse/STDCXX-250 Project: C++ Standard Library Issue Type: Bug Components: 27. Input/Output Affects Versions: 4.1.2, 4.1.3 Environment: all Reporter: Martin Sebor Priority: Minor Fix For: 4.2.1 Attachments: istream.cc.diff 21.3.7.9, p3 says about the string extractor: If the function extracts no characters, it calls is.setstate(ios::failbit), which may throw ios_base::failure (27.4.4.3). The test program below shows that in unbuffered mode stdcxx fails to do so when an exception is thrown during the third call to underflow(). $ cat v.cpp make v ./v #include cassert #include cstdio #include istream #include string int main () { struct: std::streambuf { int_type underflow () { static int i = 0; // i == 0: sgect() invoked from sentry ctor // i == 1: sgetc() invoked from operator() // i == 2: sbumpc() invoked from operator() return 1 i++ ? throw i : 'x'; } } buf; std::istream is (buf); std::string s; is s; std::printf (state = %c%c%c, string = \%s\ (length %u)\n, is.rdstate () is.badbit ? 'B' : '-', is.rdstate () is.eofbit ? 'E' : '-', is.rdstate () is.failbit ? 'F' : '-', s.c_str (), s.size ()); assert (x == s); assert ((is.failbit | is.badbit) == is.rdstate ()); } gcc -c -I/build/sebor/dev/stdlib/include/ansi -D_RWSTDDEBUG -pthreads -D_RWSTD_USE_CONFIG -I/build/sebor/dev/stdlib/include -I/build/sebor/gcc-4.1.0-15s/include -I/build/sebor/dev/stdlib/../rwtest -I/build/sebor/dev/stdlib/../rwtest/include -I/build/sebor/dev/stdlib/tests/include -pedantic -nostdinc++ -g -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long v.cpp gcc v.o -o v -L/build/sebor/gcc-4.1.0-15s/rwtest -lrwtest15s -pthreads -L/build/sebor/gcc-4.1.0-15s/lib -lstd15s -lsupc++ -lm state = B--, string = x (length 1) Assertion failed: (is.failbit | is.badbit) == is.rdstate (), file v.cpp, line 30 Abort (core dumped) -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.
[jira] Updated: (STDCXX-250) std::operator(istream, string) fails to set failbit after it extracts 0 characters
[ http://issues.apache.org/jira/browse/STDCXX-250?page=all ] Martin Sebor updated STDCXX-250: Summary: std::operator(istream, string) fails to set failbit after it extracts 0 characters (was: std::operator.(istream, string) fails to set failbit after it extracts 0 characters) std::operator(istream, string) fails to set failbit after it extracts 0 characters -- Key: STDCXX-250 URL: http://issues.apache.org/jira/browse/STDCXX-250 Project: C++ Standard Library Type: Bug Components: 27. Input/Output Versions: 4.1.2, 4.1.3 Environment: all Reporter: Martin Sebor Priority: Minor 21.3.7.9, p3 says about the string extractor: If the function extracts no characters, it calls is.setstate(ios::failbit), which may throw ios_base::failure (27.4.4.3). The test program below shows that in unbuffered mode stdcxx fails to do so when an exception is thrown during the third call to underflow(). $ cat v.cpp make v ./v #include cassert #include cstdio #include istream #include string int main () { struct: std::streambuf { int_type underflow () { static int i = 0; // i == 0: sgect() invoked from sentry ctor // i == 1: sgetc() invoked from operator() // i == 2: sbumpc() invoked from operator() return 1 i++ ? throw i : 'x'; } } buf; std::istream is (buf); std::string s; is s; std::printf (state = %c%c%c, string = \%s\ (length %u)\n, is.rdstate () is.badbit ? 'B' : '-', is.rdstate () is.eofbit ? 'E' : '-', is.rdstate () is.failbit ? 'F' : '-', s.c_str (), s.size ()); assert (x == s); assert ((is.failbit | is.badbit) == is.rdstate ()); } gcc -c -I/build/sebor/dev/stdlib/include/ansi -D_RWSTDDEBUG -pthreads -D_RWSTD_USE_CONFIG -I/build/sebor/dev/stdlib/include -I/build/sebor/gcc-4.1.0-15s/include -I/build/sebor/dev/stdlib/../rwtest -I/build/sebor/dev/stdlib/../rwtest/include -I/build/sebor/dev/stdlib/tests/include -pedantic -nostdinc++ -g -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long v.cpp gcc v.o -o v -L/build/sebor/gcc-4.1.0-15s/rwtest -lrwtest15s -pthreads -L/build/sebor/gcc-4.1.0-15s/lib -lstd15s -lsupc++ -lm state = B--, string = x (length 1) Assertion failed: (is.failbit | is.badbit) == is.rdstate (), file v.cpp, line 30 Abort (core dumped) -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira