This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

libstdc++/9546: bad exception handling in ostream members


>Number:         9546
>Category:       libstdc++
>Synopsis:       bad exception handling in ostream members
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Feb 03 18:06:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     sebor@roguewave.com
>Release:        3.2.1
>Organization:
>Environment:

>Description:
All formatted and unformatted output functions must catch exceptions thrown from streambuf functions and set badbit. The program below fails (aborts) with 3.2.1. Looking at the code, at least the following functions are not properly dealing with exceptions: write(), flush(), tellp(), and seekp().

Regards
Martin
>How-To-Repeat:
    #include <ostream>
    #include <streambuf>

    struct buf: std::streambuf
    {
        virtual std::streamsize
        xsputn (const char_type*, std::streamsize) {
            throw 0;
            return 0;
        }
    };

    int main ()
    {
        buf b;

        std::ostream strm (&b);

        strm.write ("foo", 3);

        return !(strm.bad ());
    }

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]