re PR libstdc++/13217 (basic_filebuf::underflow doesn't deal gracefully with read...
authorPaolo Carlini <pcarlini@suse.de>
Wed, 10 Dec 2003 20:05:00 +0000 (20:05 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Wed, 10 Dec 2003 20:05:00 +0000 (20:05 +0000)
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

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/fstream.tcc

index 39dfb089a7dc1f500f3ca843fa73480c458d8805..4af6d4e83f2e10b4f1c8cd005834223b424462f7 100644 (file)
@@ -1,3 +1,9 @@
+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>
 
        PR libstdc++/10063
 
        PR libstdc++/11544
        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.
        * testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-1.cc: New.
        * testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-2.cc: New.
index 595d8bde118868b34df47788df107b17fe2e9373..998e0c3442928591bc10833342acc483dfd60287 100644 (file)
@@ -258,6 +258,8 @@ namespace std
                      streamsize __elen = _M_file.xsgetn(_M_ext_end, __rlen);
                      if (__elen == 0)
                        __got_eof = true;
+                     else if (__elen == -1)
+                       break;
                      _M_ext_end += __elen;
                    }
 
@@ -306,9 +308,12 @@ namespace std
                __throw_ios_failure("basic_filebuf::underflow "
                                    "incomplete character in file");
            }
-         else
+         else if (__r == codecvt_base::error)
            __throw_ios_failure("basic_filebuf::underflow "
                                "invalid byte sequence in file");
+         else
+           __throw_ios_failure("basic_filebuf::underflow "
+                               "error reading the file");          
        }
       return __ret;
     }