Commit 3090572c by Paolo Carlini Committed by Paolo Carlini

re PR libstdc++/13217 (basic_filebuf::underflow doesn't deal gracefully with read errors)

2003-12-10  Paolo Carlini  <pcarlini@suse.de>

	PR libstdc++/13217
	* include/bits/fstream.tcc (underflow): Deal gracefully with
	read errors: throw ios_base::failure.

From-SVN: r74506
parent 35d6801e
2003-12-10 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/13217
* include/bits/fstream.tcc (underflow): Deal gracefully with
read errors: throw ios_base::failure.
2003-12-10 Benjamin Kosnik <bkoz@redhat.com> 2003-12-10 Benjamin Kosnik <bkoz@redhat.com>
PR libstdc++/10063 PR libstdc++/10063
...@@ -358,7 +364,7 @@ ...@@ -358,7 +364,7 @@
PR libstdc++/11544 PR libstdc++/11544
PR libstdc++/11603 PR libstdc++/11603
* include/bits/fstream.tcc (underflow): Throw ios_base:failure * include/bits/fstream.tcc (underflow): Throw ios_base::failure
upon incomplete or invalid byte sequences in the file. upon incomplete or invalid byte sequences in the file.
* testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-1.cc: New. * testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-1.cc: New.
* testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-2.cc: New. * testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-2.cc: New.
......
...@@ -258,6 +258,8 @@ namespace std ...@@ -258,6 +258,8 @@ namespace std
streamsize __elen = _M_file.xsgetn(_M_ext_end, __rlen); streamsize __elen = _M_file.xsgetn(_M_ext_end, __rlen);
if (__elen == 0) if (__elen == 0)
__got_eof = true; __got_eof = true;
else if (__elen == -1)
break;
_M_ext_end += __elen; _M_ext_end += __elen;
} }
...@@ -306,9 +308,12 @@ namespace std ...@@ -306,9 +308,12 @@ namespace std
__throw_ios_failure("basic_filebuf::underflow " __throw_ios_failure("basic_filebuf::underflow "
"incomplete character in file"); "incomplete character in file");
} }
else else if (__r == codecvt_base::error)
__throw_ios_failure("basic_filebuf::underflow " __throw_ios_failure("basic_filebuf::underflow "
"invalid byte sequence in file"); "invalid byte sequence in file");
else
__throw_ios_failure("basic_filebuf::underflow "
"error reading the file");
} }
return __ret; return __ret;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment