1. 06 Feb, 2017 1 commit
  2. 05 Feb, 2017 5 commits
  3. 04 Feb, 2017 1 commit
    • Nikias Bassen's avatar
      bplist: Fix OOB write on heap buffer and improve recursion check · c4dcf11b
      Nikias Bassen authored
      Issue #92 pointed out an problem with (invalid) bplist files which have
      exactly one structured node whose subnode reference itself.
      The recursion check used a fixed size array with the size of the total number
      of objects. In this case the number of objects is 1 but the recursion check
      code wanted to set the node_index for the level 1 which leads to an OOB write
      on the heap. This commit fixes/improves two things:
      1) Prevent OOB write by using a dynamic data storage for the used node
         indexes (plist_t of type PLIST_ARRAY)
      2) Reduces the memory usage of large binary plists, because not the total
         number of nodes in the binary plist, but the number of recursion levels
         is important for the recursion check.
      c4dcf11b
  4. 03 Feb, 2017 2 commits
  5. 01 Feb, 2017 2 commits
  6. 28 Jan, 2017 8 commits
  7. 25 Jan, 2017 2 commits
  8. 19 Jan, 2017 4 commits
  9. 18 Jan, 2017 1 commit
    • Nikias Bassen's avatar
      bplist: Improve UINT_TO_HOST macro, remove uint24_from_be function · 82501db7
      Nikias Bassen authored
      The uint24_from_be function used memcpy and a call to byte_convert.
      Instead the macro now shifts the data appropriately with a new beNtoh
      macro that eventually uses be64toh.
      This commit also fixes the problem where binary plist data with other
      non-power-of-2 sizes (like 5,6, or 7) where not handled correctly,
      and actually supports sizes larger than 8 bytes though only the last
      8 bytes are actually converted (nobody will come up with such a large
      plist anyway).
      82501db7
  10. 16 Jan, 2017 1 commit
    • Nikias Bassen's avatar
      bplist: Disallow key nodes with non-string node types · 7a28a14c
      Nikias Bassen authored
      As reported in #86, the binary plist parser would force the type of the
      key node to be of type PLIST_KEY while the node might be of a different
      i.e. non-string type. A following plist_free() might then call free() on
      an invalid pointer; e.g. if the node is of type integer, its value would
      be considered a pointer, and free() would cause an error.
      We prevent this issue by disallowing non-string key nodes during parsing.
      7a28a14c
  11. 18 Nov, 2016 2 commits
  12. 13 Nov, 2016 1 commit
  13. 10 Nov, 2016 4 commits
  14. 09 Nov, 2016 1 commit
  15. 22 Oct, 2016 1 commit
  16. 18 Sep, 2016 1 commit
    • Nikias Bassen's avatar
      Change internal storage of PLIST_DATE values from struct timeval to double · 912cb459
      Nikias Bassen authored
      This removes the timeval union member from the plist_data_t structure.
      Since struct timeval is 2x64bit on 64bit platforms this member unnecessarily
      grew the union size to 16 bytes while a size of 8 bytes is sufficient.
      Also, on 32bit platforms struct timeval is only 2x32bit of size, limiting the
      range of possible time values. In addition the binary property list format
      also stores PLIST_DATE nodes as double.
      912cb459
  17. 12 May, 2016 1 commit
  18. 05 Feb, 2015 1 commit
  19. 31 Jan, 2015 1 commit