gcc/libstdc++-v3/testsuite/27_io/basic_istream
Jonathan Wakely b32eea9c0c libstdc++: Fix istream::ignore discarding too many chars (PR 94749)
The current code assumes that if the next character in the stream is
equal to the delimiter then we stopped because we saw that delimiter,
and so discards it.  But in the testcase for the PR we stop because we
reached the maximum number of characters, and it's coincidence that the
next character equals the delimiter. We should not discard the next
character in that case.

The fix is to check that we haven't discarded __n characters already,
instead of checking whether the next character equals __delim. Because
we've already checked for EOF, if we haven't discarded __n yet then we
know we stopped because we saw the delimiter. On the other hand, if the
next character is the delimiter we don't know if that's why we stopped.

	PR libstdc++/94749
	* include/bits/istream.tcc (basic_istream::ignore(streamsize, CharT)):
	Only discard an extra character if we didn't already reach the
	maximum number.
	* src/c++98/istream.cc (istream::ignore(streamsiz, char))
	(wistream::ignore(streamsize, wchar_t)): Likewise.
	* testsuite/27_io/basic_istream/ignore/char/94749.cc: New test.
	* testsuite/27_io/basic_istream/ignore/wchar_t/94749.cc: New test.
2020-06-11 18:41:37 +01:00
..
cons Update copyright years. 2020-01-01 12:51:42 +01:00
exceptions Update copyright years. 2020-01-01 12:51:42 +01:00
extractors_arithmetic Update copyright years. 2020-01-01 12:51:42 +01:00
extractors_character Update copyright years. 2020-01-01 12:51:42 +01:00
extractors_other Update copyright years. 2020-01-01 12:51:42 +01:00
get Update copyright years. 2020-01-01 12:51:42 +01:00
getline Update copyright years. 2020-01-01 12:51:42 +01:00
ignore libstdc++: Fix istream::ignore discarding too many chars (PR 94749) 2020-06-11 18:41:37 +01:00
peek Update copyright years. 2020-01-01 12:51:42 +01:00
putback Update copyright years. 2020-01-01 12:51:42 +01:00
read Update copyright years. 2020-01-01 12:51:42 +01:00
readsome Update copyright years. 2020-01-01 12:51:42 +01:00
requirements Update copyright years. 2020-01-01 12:51:42 +01:00
seekg Update copyright years. 2020-01-01 12:51:42 +01:00
sentry Update copyright years. 2020-01-01 12:51:42 +01:00
tellg Update copyright years. 2020-01-01 12:51:42 +01:00
ws Update copyright years. 2020-01-01 12:51:42 +01:00