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

sebor@roguewave.com sebor@roguewave.com
Mon Feb 3 18:06:00 GMT 2003


>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:



More information about the Gcc-bugs mailing list