summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-message-builder.c
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2003-03-02 17:34:30 +0000
committerHavoc Pennington <hp@redhat.com>2003-03-02 17:34:30 +0000
commitf7d96bdf80129d95cf33f26a778ce2c94a818bd0 (patch)
treef1df8da8c12b134a5ab5e06eab9951394754b69b /dbus/dbus-message-builder.c
parent7584a7bdccc6c7cf9f3d11c315f088794729b7e4 (diff)
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.c35
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"))
{