diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | dbus/dbus-sysdeps-util.c | 16 | ||||
-rw-r--r-- | dbus/dbus-sysdeps.c | 6 |
3 files changed, 16 insertions, 13 deletions
@@ -1,3 +1,10 @@ +2007-07-12 Havoc Pennington <hp@redhat.com> + + * dbus/dbus-sysdeps-util.c (_dbus_sysdeps_test): invert the test + for parsing hex as double to be sure it fails to work + + * dbus/dbus-sysdeps.c (_dbus_string_parse_double): don't allow hex numbers. + 2007-07-10 Havoc Pennington <hp@redhat.com> * dbus/dbus-connection.c (struct DBusConnection): Fix from Olivier diff --git a/dbus/dbus-sysdeps-util.c b/dbus/dbus-sysdeps-util.c index 1f6ceb9b..4d1d0daa 100644 --- a/dbus/dbus-sysdeps-util.c +++ b/dbus/dbus-sysdeps-util.c @@ -142,20 +142,10 @@ _dbus_sysdeps_test (void) } _dbus_string_init_const (&str, "0xff"); - if (!_dbus_string_parse_double (&str, - 0, &val, &pos)) - { - _dbus_warn ("Failed to parse double"); - exit (1); - } - if (ABS (0xff - val) > 1e-6) - { - _dbus_warn ("Failed to parse 0xff correctly, got: %f\n", val); - exit (1); - } - if (pos != 4) + if (_dbus_string_parse_double (&str, + 0, &val, &pos)) { - _dbus_warn ("_dbus_string_parse_double of \"0xff\" returned wrong position %d", pos); + _dbus_warn ("Should not have parsed hex as double\n"); exit (1); } diff --git a/dbus/dbus-sysdeps.c b/dbus/dbus-sysdeps.c index c310b281..cd3e20e7 100644 --- a/dbus/dbus-sysdeps.c +++ b/dbus/dbus-sysdeps.c @@ -750,6 +750,12 @@ _dbus_string_parse_double (const DBusString *str, p = _dbus_string_get_const_data_len (str, start, _dbus_string_get_length (str) - start); + /* parsing hex works on linux but isn't portable, so intercept it + * here to get uniform behavior. + */ + if (p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) + return FALSE; + end = NULL; errno = 0; v = ascii_strtod (p, &end); |