diff options
author | Havoc Pennington <hp@redhat.com> | 2003-03-02 17:34:30 +0000 |
---|---|---|
committer | Havoc Pennington <hp@redhat.com> | 2003-03-02 17:34:30 +0000 |
commit | f7d96bdf80129d95cf33f26a778ce2c94a818bd0 (patch) | |
tree | f1df8da8c12b134a5ab5e06eab9951394754b69b /dbus/dbus-message-builder.c | |
parent | 7584a7bdccc6c7cf9f3d11c315f088794729b7e4 (diff) | |
download | dbus-f7d96bdf80129d95cf33f26a778ce2c94a818bd0.tar.gz |
2003-03-02 Havoc Pennington <hp@pobox.com>
* 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
Diffstat (limited to 'dbus/dbus-message-builder.c')
-rw-r--r-- | dbus/dbus-message-builder.c | 35 |
1 files changed, 32 insertions, 3 deletions
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")) { |