1. 31 Jul, 2018 1 commit
    • Veselin Georgiev's avatar
      Fix SIGBUS due to unaligned access · 748a652f
      Veselin Georgiev authored
      Update RAPIDJSON_ALIGN() to always align on an 8-byte boundary
      unless otherwise overridden.
      
      On some platforms (such as ARM), 64-bit items (such as doubles and
      64-bit integers) must be aligned to an 8 byte address, even though the
      architecture is only 32-bits. On these platforms, MemoryPoolAllocator
      must match the malloc() behavior and return a 8 byte aligned allocation.
      This eliminates any alignment issues that may occur at the expense of
      additional memory overhead.
      
      Failure to do so caused a SIGBUS signal when calling
      GenericValue::SetNull(). The size of the data_ member of the
      GenericValue class is 16 bytes in 32-bit mode and its constructor
      requires an 8-byte aligned access.
      
      While parsing a JSON formatted string using Document::ParseStream(), a
      stack object containing GenericValue items was constructed. Since the
      stack was 8-byte aligned, the constructor calls would succeed. When the
      lifetime of the object ends, SetObjectRaw() is invoked. This triggered
      an allocation with 4-byte alignment to which the previously 8-byte
      aligned GenericValue array was copied. After this, any call to a
      GenericValue API that triggered the constructor and thus the placement
      new operation on the Data type member would trigger a SIGBUS.
      Signed-off-by: 's avatarVeselin Georgiev <veselin.georgiev@garmin.com>
      Signed-off-by: 's avatarJoshua Watt <Joshua.Watt@garmin.com>
      748a652f
  2. 02 Feb, 2016 1 commit
  3. 18 Dec, 2015 1 commit
  4. 01 Sep, 2015 1 commit
  5. 03 May, 2015 1 commit
  6. 18 Apr, 2015 1 commit
  7. 17 Apr, 2015 1 commit
  8. 16 Apr, 2015 1 commit
  9. 14 Apr, 2015 1 commit
  10. 14 Jan, 2015 1 commit
  11. 11 Aug, 2014 1 commit
  12. 18 Nov, 2011 1 commit