sgetn() fails to extract characters from an unbuffered stream -------------------------------------------------------------
Key: STDCXX-1026 URL: https://issues.apache.org/jira/browse/STDCXX-1026 Project: C++ Standard Library Issue Type: Bug Components: 27. Input/Output Affects Versions: 4.2.1 Reporter: Martin Sebor Assignee: Martin Sebor Fix For: 4.2.2 This bug was uncovered in this [discussion | http://forums.sun.com/thread.jspa?messageID=10532349]: {noformat} $ cat t.cpp && make t && ./t #include <cassert> #include <istream> #include <streambuf> int main () { static int x = '0'; struct: std::streambuf { // unbuffered, always successfully reads one character int_type underflow () { return x++; } } sb; // "endless" stream that never reaches EOF std::istream endless (&sb); char s [4] = ""; endless.read (s, sizeof s); // expect to extract as many characters as requested assert (endless.good ()); assert (sizeof s == endless.gcount ()); assert ('0' == s [0] && '1' == s [1] && '2' == s [2] && '3' == s [3]); } gcc -c -I/home/sebor/stdcxx-4.2.1/include/ansi \ -I/home/sebor/stdcxx-4.2.1/include \ -I/build/sebor/stdcxx-4.2.1-gcc-4.3.0-8D/include \ -I/home/sebor/stdcxx-4.2.1/examples/include \ -pedantic -nostdinc++ -O2 -W -Wall \ -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long -Wcast-align t.cpp t.cpp: In function 'int main()': t.cpp:9: warning: inlining failed in call to 'virtual main()::<anonymous struct>::~._26()': call is unlikely and code size would grow t.cpp:24: warning: called from here t.cpp:9: warning: inlining failed in call to 'virtual main()::<anonymous struct>::~._26()': call is unlikely and code size would grow t.cpp:24: warning: called from here gcc t.o -o t -L/build/sebor/stdcxx-4.2.1-gcc-4.3.0-8D/lib -Wl,-R/build/sebor/stdcxx-4.2.1-gcc-4.3.0-8D/lib -lstd8D -lsupc++ -lm t: t.cpp:22: int main(): Assertion `endless.good ()' failed. Aborted {noformat} -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.