From f7d96bdf80129d95cf33f26a778ce2c94a818bd0 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Sun, 2 Mar 2003 17:34:30 +0000 Subject: 2003-03-02 Havoc Pennington * test/break-loader.c (randomly_set_extreme_ints): add test that sets really huge and small integers * dbus/dbus-marshal.c (_dbus_marshal_validate_arg): add check that length of boolean array fits in the string, and that string has room for boolean value in single-bool case. * dbus/dbus-message-builder.c (_dbus_message_data_load): add optional value to "ALIGN" command which is what to fill the alignment with. * test/data/valid-messages/no-padding.message: add regression test for the message padding problem --- dbus/dbus-message-builder.c | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) (limited to 'dbus/dbus-message-builder.c') diff --git a/dbus/dbus-message-builder.c b/dbus/dbus-message-builder.c index dea50d7f..3501da9a 100644 --- a/dbus/dbus-message-builder.c +++ b/dbus/dbus-message-builder.c @@ -334,6 +334,12 @@ _dbus_message_data_load (DBusString *dest, _dbus_string_free (&file); return FALSE; } + + { + const char *s; + _dbus_string_get_const_data (filename, &s); + _dbus_verbose ("Loading %s\n", s); + } if ((result = _dbus_file_get_contents (&file, filename)) != DBUS_RESULT_SUCCESS) { @@ -439,24 +445,47 @@ _dbus_message_data_load (DBusString *dest, "ALIGN")) { long val; - + int end; + int orig_len; + _dbus_string_delete_first_word (&line); - if (!_dbus_string_parse_int (&line, 0, &val, NULL)) + if (!_dbus_string_parse_int (&line, 0, &val, &end)) { _dbus_warn ("Failed to parse integer\n"); goto parse_failed; } - if (val > 16) + if (val > 8) { _dbus_warn ("Aligning to %ld boundary is crack\n", val); goto parse_failed; } + + orig_len = _dbus_string_get_length (dest); if (!_dbus_string_align_length (dest, val)) goto parse_failed; + + if (_dbus_string_parse_int (&line, end, &val, NULL)) + { + /* If there's an optional second int argument, + * fill in align padding with that value + */ + if (val < 0 || val > 255) + { + _dbus_warn ("can't fill align padding with %ld, must be a byte value\n", val); + goto parse_failed; + } + + end = orig_len; + while (end < _dbus_string_get_length (dest)) + { + _dbus_string_set_byte (dest, end, val); + ++end; + } + } } else if (_dbus_string_starts_with_c_str (&line, "UNALIGN")) { -- cgit