0-size array marshaling ?

Simon McVittie simon.mcvittie at collabora.co.uk
Tue Jul 5 09:41:16 UTC 2016


On 04/07/16 14:43, Jean Parpaillon wrote:
> The question is: for 0-size array, is padding to the alignment boundary
> of the array element type required ?

libdbus (dbus.git) is the reference implementation. What does it do?
That's your answer. I would be happy to review a spec patch that
clarifies what the right thing is (via
<https://bugs.freedesktop.org/enter_bug.cgi?product=dbus&component=core>).

Because the array length is aligned to a 4-byte boundary, I would
suggest serializing this message:

- type 'u', uint32 0x11223344 (to make it easy to find the payload)
- type 'y', byte with arbitrary non-zero value, say 0x42
- type 'at', empty array of uint64
- type 'y', byte with arbitrary non-zero value, say 0x23

and looking at the resulting serialized bytes. If arrays of length 0 do
insert padding appropriate for the content, I would expect this hex-dump:

44 33 22 11                 # uint32 (I've assumed little-endian)
            42              # first byte
               00 00 00     # pad to 4-byte boundary
00 00 00 00                 # array length
            00 00 00 00     # pad to 8-byte boundary
                            # no array contents
23                          # second byte

and if they don't, I would expect:

44 33 22 11                 # uint32 (I've assumed little-endian)
            42              # first byte
               00 00 00     # pad to 4-byte boundary
00 00 00 00                 # array length
                            # no padding, no array contents
            23              # second byte

Whichever one libdbus does, that's correct and the other one is wrong.

Regards,
    S
-- 
Simon McVittie
Collabora Ltd. <http://www.collabora.com/>



More information about the dbus mailing list