File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -238,10 +238,20 @@ def add_field_object(field, value)
238238
239239 def add_field_array ( field , value )
240240 align! ( @table , View ::OFFSET_SIZE )
241- align! ( @values , View ::OFFSET_SIZE )
241+
242+ # Vector body must be aligned with 8 byte. Vector is
243+ # serialized as |length|body|. `length` is uoffset_t
244+ # (uint32_t) and its size is 4 byte. So we need to align
245+ # `@values` with 8 byte and pad the first 4 byte:
246+ # |4 byte padding|length (4 byte)|body (8 byte aligned)|
247+ vector_body_alignment = 8
248+ vector_length_pack_string = "L<"
249+ vector_length_size = 4
250+ align! ( @values , vector_body_alignment )
251+ pad! ( @values , vector_body_alignment - vector_length_size )
242252 value_offset = @values . bytesize
243- # The number of elements.
244- @values . append_as_bytes ( [ value . size ] . pack ( "L<" ) )
253+ @values . append_as_bytes ( [ value . size ] . pack ( vector_length_pack_string ) )
254+
245255 element_base_type = field . base_type [ 0 ]
246256 case element_base_type
247257 when String
You can’t perform that action at this time.
0 commit comments