https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93672
Bug ID: 93672
Summary: std::basic_istream::ignore hangs if delim MSB is set
Product: gcc
Version: 9.1.0
URL: https://stackoverflow.com/questions/60140947/stdbasic-
istreamignore-hangs-if-delim-msb-is-set
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: erenon2 at gmail dot com
Target Milestone: ---
The following program hangs:
#include <iostream>
#include <sstream>
int main()
{
std::stringstream str;
str.put('a'); // 1
str.put('\x80'); // 2
str.put('a'); // 3
str.ignore(32, '\x80'); // hangs
std::cout << str.tellg() << "\n";
}
Removing any of the numbered lines (1,2,3) makes the problem go away.
Using std::basic_stringstream<unsigned char> does not exhibit the issue.
Passing unsigned delim (that does not get sign extended) also fixes it.
ASAN or UBSAN is silent. `-D_GLIBCXX_DEBUG` does not make a difference.
GCC 5.4, 6.3, 8.2, 9.2 are affected.