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