Bug 70664 - failbit is not set on stream reading negative value into unsigned type
Summary: failbit is not set on stream reading negative value into unsigned type
Status: NEW
Alias: None
Product: gcc
Classification: Unclassified
Component: libstdc++ (show other bugs)
Version: 4.8.4
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords: patch
Depends on:
Blocks:
 
Reported: 2016-04-14 12:50 UTC by osternhase
Modified: 2018-03-13 16:44 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2018-03-13 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description osternhase 2016-04-14 12:50:08 UTC
I am using Ubuntu 14.04 64-bit (x86_64). Following code snippet:

#include <iostream>
#include <sstream>

using namespace std;

template <typename T>
void test(const char * str)
{
	istringstream a(str);
	T i;

	a >> i;
	if (a.fail())
		cout << "Ok\n";
	else
		cout << "Bug\n";
}

int main(int argc, char *argv[])
{
	test<int>("2147483648");  // INT_MIN-1
	test<int>("-2147483649"); // INT_MAX+1
	test<unsigned>("4294967296");  // UINT_MAX+1
	test<unsigned>("-1");
	return 0;
}
Compile:
  g++ t.cpp -o t

result:

  Ok
  Ok
  Ok
  Bug

expected:

  Ok
  Ok
  Ok
  Ok

g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04.1' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.1)

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep LIBCXX :
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_DEBUG_MESSAGE_LENGTH
Comment 1 Jonathan Wakely 2018-03-13 16:44:26 UTC
Patch fixing this:
https://gcc.gnu.org/ml/gcc-patches/2018-03/msg00601.html