Stuart Buchanan wrote:
> Csaba Halász wrote:
> 
>> On 32 bit system, sizeof(T_PositionMsg) = 196. On 64 bit system it is
>> 200, due to extra 4 bytes padding at the end.
>>
>> To make matters worse, in the assembled MP packet this message is
>> followed by property values.
>> Assuming the padding bytes are zero, a 32 bit receiver should be able
>> to process packets sent by a 64 bit machine, because it skips over the
>> unknown id of 0. I am puzzled how it even works the other way around.
>>
>> I also don't understand the reason for the padding.
The xdr_data2_t elements are 8 bytes long and must be 8-byte aligned on x86_64; 
see http://refspecs.freestandards.org/elf/x86_64-abi-0.95.pdf . Therefore the 
whole structure must be 8 byte aligned.
> 
> It's been years since I looked at the MP code, but IIRC the XDR spec requires
> padding so that each value is a multiple of 4 bytes in length.  I remember 
> having
> to put in some code to add padding when writing string values for the MP chat
> function. It's entirely possible that there's an ancient bug lurking there.

The bug was introduced when the message format was changed to support optional 
properties. It's in the plib-based release too.

This is a serious bug, definitely worth fixing. To make it more interesting, 
the 
padding inserted on x86_64 could contain garbage that makes it look like a real 
property. As I see it, the best plan is to  add the padding to the structure 
and 
explicitly zero the padding. Then, add some defensive code to see if the 
padding 
in a received message is 0; if it is not, then verify that the property list is 
well-formed if we start decoding from that word. If it isn't, then assume that 
the message was sent by an old 64 bit client with properties starting 200 bytes 
after the beginning of the position message.

We could bump the protocol number, but I notice that that has never been done, 
even when the format of the position message changed :) That would mean that 
people running plib FlightGear wouldn't see new clients, which is probably 
unacceptable.

Tim

------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
Flightgear-devel mailing list
Flightgear-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/flightgear-devel

Reply via email to