On Fri, 29 Mar 2019 at 11:22, Daniel P. Berrangé <berra...@redhat.com> wrote: > > The 'filename' field in ObjectInfo struct is declared as a > zero length array of uint16_t. Accessing it is equivalent > to taking the address of the field, and taking the address > of fields in a packed struct causes unaligned pointer > warnings: > > hw/usb/dev-mtp.c: In function ‘usb_mtp_write_metadata’: > hw/usb/dev-mtp.c:1712:36: warning: taking address of packed member of ‘struct > <anonymous>’ may result in an unaligned pointer value > [-Waddress-of-packed-member] > 1712 | dataset->filename); > | ~~~~~~~^~~~~~~~~~
This one's come up before -- see http://patchwork.ozlabs.org/patch/1049654/ and my comments on it. I think that utf16_to_str() should take a byte array and use the appropriate lduw_*_p() function to read from it, and that we need to think more carefully about endianness and about the "malicious short buffer" case. thanks -- PMM