[Bug libstdc++/47921] pbump will overflow when input n is larger than 2G-1
redi at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Feb 28 13:01:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47921
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-02-28 12:43:41 UTC ---
something like this (untested)
--- include/std/streambuf.orig 2011-02-28 12:40:44.559350898 +0000
+++ include/std/streambuf 2011-02-28 12:32:20.445685621 +0000
@@ -38,6 +38,7 @@
#include <bits/c++config.h>
#include <iosfwd>
+#include <limits>
#include <bits/localefwd.h>
#include <bits/ios_base.h>
#include <bits/cpp_type_traits.h>
--- include/bits/streambuf.tcc.orig 2011-02-28 12:40:35.554301020 +0000
+++ include/bits/streambuf.tcc 2011-02-28 12:42:30.761788519 +0000
@@ -91,6 +91,11 @@
traits_type::copy(this->pptr(), __s, __len);
__ret += __len;
__s += __len;
+ while (__len > std::numeric_limits<int>::max())
+ {
+ this->pbump(std::numeric_limits<int>::max());
+ __len -= std::numeric_limits<int>::max();
+ }
this->pbump(__len);
}
--- src/strstream.cc.orig 2011-02-28 12:40:25.373244770 +0000
+++ src/strstream.cc 2011-02-28 12:42:10.945712166 +0000
@@ -161,6 +161,11 @@
}
setp(buf, buf + new_size);
+ while (old_size > INT_MAX)
+ {
+ this->pbump(INT_MAX);
+ old_size -= INT_MAX;
+ }
pbump(old_size);
if (reposition_get)
More information about the Gcc-bugs
mailing list