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]

c++/5292: Assumes streambuf::overflow returns character put



>Number:         5292
>Category:       c++
>Synopsis:       Assumes streambuf::overflow returns character put
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun Jan 06 10:16:00 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Ronald Van Iwaarden
>Release:        gcc version 3.0.2 20010905 (Red hat Linux 7.1 3.2.1-3)
>Organization:
>Environment:
RedHat Linux version 7.2 with gcc 3.0 installed
>Description:
in streambuf.tcc, line 208, method sputc(char_type__c) it reads:

__ret = this->overflow(traits_type::to_int_type(__c));

ostream::overflow is (I think) required to return EOF on failure and any other character on success.  This means that, if overflow returns something other than the character it puts, that sputc will return the wrong value.  This should read:

 __ret = (this->overflow(traits_type::to_int_type(__c)) == EOF) ? EOF : __c;

>How-To-Repeat:
Compile and execute the attached program.  Changing line 22 as described in the comment above it shows a workaround for the problem
>Fix:
See the description above.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="streamTest.C"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="streamTest.C"

I2luY2x1ZGUgPGlvc3RyZWFtLmg+CgpjbGFzcyBNeVN0cmVhbUJ1ZiA6IHB1YmxpYyBzdHJlYW1i
dWZ7CnByaXZhdGU6CiAgaW50IFdyaXRlIChjaGFyIGNvbnN0KiB0ZXh0LCBpbnQgbGVuZ3RoKXsK
ICAgIGNvdXQud3JpdGUodGV4dCwgbGVuZ3RoKTsKICAgIHJldHVybiBsZW5ndGg7CiAgfQpwcm90
ZWN0ZWQ6CiAgaW50IHN5bmMgKCl7CiAgICBpbnQgbG9jYWxOID0gaW50KHBwdHIgKCkgLSBwYmFz
ZSAoKSk7CiAgICBpbnQgc3VjY2VzcyA9IDA7CiAgICBpZiAobG9jYWxOICYmIChXcml0ZSAocGJh
c2UgKCksIGxvY2FsTikgIT0gbG9jYWxOKSkgc3VjY2VzcyA9IEVPRjsKICAgIHJldHVybiBzdWNj
ZXNzOwogIH0KCiAgaW50IG92ZXJmbG93IChpbnQgY2gpewogICAgaW50IGxvY2FsTiA9IGludChw
cHRyICgpIC0gcGJhc2UgKCkpOwogICAgLy9Ob3RlIHRoYXQgaWYgdGhlIGZvbGxvd2luZyBpcyBj
aGFuZ2VkIHRvCiAgICAvL2ludCByZXR1cm5WYWx1ZSA9IGNoOwogICAgLy90aGlzIHdpbGwgd29y
ay4KICAgIGludCByZXR1cm5WYWx1ZSA9ICFFT0Y7CiAgICBpZiAobG9jYWxOICYmIHN5bmMgKCkp
IHJldHVyblZhbHVlID0gRU9GOwogICAgZWxzZSBpZiAoY2ggIT0gRU9GKXsKICAgICAgY2hhciBj
YnVmID0gY2g7CiAgICAgIGlmIChXcml0ZSAoJmNidWYsIDEpICE9IDEpIHJldHVyblZhbHVlID0g
RU9GOwogICAgfQogICAgaWYgKHJldHVyblZhbHVlICE9IDApIHBidW1wICgtbG9jYWxOKTsgIC8v
IFJlc2V0IHBwdHIoKS4KICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICB9CgogIGludCB4c3B1dG4g
KGNoYXIgY29uc3QqIHRleHQsIGludCBsb2NhbE4pewogICAgaW50IGJ5dGVzV3JpdHRlbiA9IDA7
CiAgICBpZiAoc3luYygpICE9IEVPRikgYnl0ZXNXcml0dGVuID0gV3JpdGUodGV4dCwgbG9jYWxO
KTsKICAgIHJldHVybiBieXRlc1dyaXR0ZW47CiAgfQp9OwoKY2xhc3MgTXlvc3RyZWFtIDogcHVi
bGljIG9zdHJlYW17CnB1YmxpYzoKICBNeVN0cmVhbUJ1ZiBsb2NhbEJ1ZjsKICBNeW9zdHJlYW0o
b3N0cmVhbSYgc3RybSk6IG9zdHJlYW0oJmxvY2FsQnVmKXt9Cn07Ci8vKE15U3RyZWFtQnVmICop
IDB4YmZmZmYyZDQKaW50IG1haW4oKXsKICBNeW9zdHJlYW0gTXljb3V0KGNvdXQpOwogIGNvdXQ8
PCJUaGlzIHNob3VsZCBwcmludCBhIGJsYW5rIGxpbmUgZm9sbG93ZWQgYnkgXCJibGFoXCIiPDxl
bmRsOwogIE15Y291dDw8ZW5kbDsKICBNeWNvdXQ8PCJibGFoIjw8ZW5kbDsKfQo=


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