summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2007-07-12 22:18:05 +0000
committerHavoc Pennington <hp@redhat.com>2007-07-12 22:18:05 +0000
commited57b9c663db89370055c5196e7e0b537647e9ef (patch)
tree96c4f532c4827b8e3968c9e20acfa804b125af10
parente339814224d54c9b048ead2d6965f89790ec318a (diff)
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.
-rw-r--r--ChangeLog7
-rw-r--r--dbus/dbus-sysdeps-util.c16
-rw-r--r--dbus/dbus-sysdeps.c6
3 files changed, 16 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index ce6ac551..eb8b2876 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);