This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug libstdc++/37160] New: Handling of badly formatted double
- From: "jm at bourguet dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 19 Aug 2008 11:57:34 -0000
- Subject: [Bug libstdc++/37160] New: Handling of badly formatted double
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
The following program:
#include <iostream>
#include <sstream>
#include <istream>
#include <ostream>
#include <string>
#include <stdio.h>
#include <errno.h>
int main(int argc, char* argv[]) {
++argv;
for (; *argv != 0; ++argv) {
std::cout << "Input: |" << *argv << "|\n";
std::istringstream is(*argv);
double d = 0;
is >> d;
if (!is) {
if (is.fail()) std::cout << " fail() after is >> d\n";
if (is.eof()) std::cout << " eof() after is >> d\n";
if (is.bad()) std::cout << " bad() after is >> d\n";
is.clear();
}
std::cout << " >> d -> " << d << '\n';
std::string s;
if (std::getline(is, s)) {
std::cout << " still to read: |" << s << "|\n";
} else {
if (is.fail()) std::cout << " fail() after getline(is, s)\n";
if (is.eof()) std::cout << " eof() after getline(is, s)\n";
if (is.bad()) std::cout << " bad() after getline(is, s)\n";
}
}
}
compiled with g++ 4.2.4 on Linux (I've tried also various other versions on
Linux and Solaris, they all had the same behavior) has the following result:
> ./a.out "1.e x" "1.e+ x" "1.e.e. x"
Input: |1.e x|
>> d -> 1
still to read: | x|
Input: |1.e+ x|
>> d -> 1
still to read: | x|
Input: |1.e.e. x|
>> d -> 1
still to read: |.e. x|
I'd have expected either a failure and consuming the badly formed double, or a
success and the first "e" remaining in the input. I've tried the same program
with Sun CC on Linux and Solaris and with IBM xlC, I get the first behavior I
expected:
> ./a.out "1.e x" "1.e+ x" "1.e.e. x"
Input: |1.e x|
fail() after is >> d
>> d -> 0
still to read: | x|
Input: |1.e+ x|
fail() after is >> d
>> d -> 0
still to read: | x|
Input: |1.e.e. x|
fail() after is >> d
>> d -> 0
still to read: |.e. x|
--
Summary: Handling of badly formatted double
Product: gcc
Version: 4.2.4
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: jm at bourguet dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37160