Skip to content
Snippets Groups Projects
  1. Feb 27, 2019
    • Arseny Kapoulkine's avatar
      tests: Expand out-of-memory union tests · 12e8b699
      Arseny Kapoulkine authored
      We now have two tests: one tests behavior when we run out of space when
      appending the node set (in which case the append fails), another one
      tests behavior when we run out of space when filtering the node set (in
      which case the set still contains redundant data).
      12e8b699
    • Arseny Kapoulkine's avatar
      XPath: Make remove_duplicates generate stable order · c55ea3bc
      Arseny Kapoulkine authored
      Given an unsorted sequence, remove_duplicates would sort it using the
      pointer value of attributes/nodes and then remove consecutive
      duplicates.
      
      This was problematic because it meant that the result of XPath queries
      was dependent on the memory allocation pattern. While it's technically
      incorrect to rely on the order, this results in easy to miss bugs.
      
      This is particularly common when XPath queries use union operators -
      although we also will call remove_duplicates in other cases.
      
      This change reworks the code to use a hash set instead, using the same
      hash function we use for compact storage. To make sure it performs well,
      we allocate enough buckets for count * 1.5 (assuming all elements are
      unique); since each bucket is a single pointer unlike xpath_node which
      is two pointers, we need somewhere between size * 0.75 and size * 1.5
      temporary storage.
      
      The resulting filtering is stable - we remove elements that we have seen
      before but we don't change the order - and is actually significantly
      faster than sorting was.
      
      With a large union operation, before this change it took ~56 ms per 100
      query invocations to remove duplicates, and after this change it takes
      ~20ms.
      
      Fixes #254.
      c55ea3bc
    • Arseny Kapoulkine's avatar
      tests: Disable flaky test · 930a701f
      Arseny Kapoulkine authored
      This test is very sensitive to the particular implementation of union
      aggregation; for now lets disable this.
      
      We need a more robust way to test union allocation failures.
      930a701f
  2. Nov 27, 2018
    • Arseny Kapoulkine's avatar
      tests: Only use load_file_special_folder test on macOS · 7664bbf9
      Arseny Kapoulkine authored
      The behavior on Linux is very different between kernel versions, and it
      triggers an unexpected OOM during sanitizer runs because somehow the
      size is reported to be LONG_MAX. It's not clear that it helps us cover
      any paths we don't cover otherwise - it would be nice to be able to test
      failing to load a multi-gigabyte file on a 32-bit system, but we can't
      do this easily atm anyway.
      7664bbf9
  3. Nov 24, 2018
    • Arseny Kapoulkine's avatar
      Fix Wdouble-promotion warnings · f9a2a7d1
      Arseny Kapoulkine authored
      We had a few places in test code and library source where we used an
      implicit float->double cast; while it should preserve the value exactly,
      gcc/clang implement this warning to make sure uses of double are intentional.
      
      This change also adds the warning to Makefile to make sure we don't
      regress on this warning.
      
      Fixes #243.
      f9a2a7d1
  4. Nov 20, 2018
    • Arseny Kapoulkine's avatar
      Escape TAB character in attribute values with 	 · aac75cd2
      Arseny Kapoulkine authored
      This change modifies the table entries for ctx_special_attr to treat TAB
      character as special, which makes the output code escape it.
      
      Before this change, trying to use TAB in an attribute value would output
      it verbatim; during subsequent parsing, pugixml - and other compliant
      parsers - would apply attribute-value normalization, turning the TAB
      into a space and losing the original value.
      
      Using 	 fixes this; if an input document has 	 in an attribute
      value, that gets unescaped into \t during parsing and escaped back into
      	 during output, which means we can now roundtrip values like this.
      
      Fixes #242.
      aac75cd2
  5. Aug 14, 2018
  6. Jul 30, 2018
  7. Apr 04, 2018
  8. Apr 03, 2018
  9. Mar 17, 2018
  10. Dec 22, 2017
    • Arseny Kapoulkine's avatar
      tests: Fix OSX test failure · a55f575a
      Arseny Kapoulkine authored
      Apparently at some point OSX behavior when reading /dev/tty switched
      from "can't open the file" to "the file can be opened and 0 bytes can be
      read from it" which generates a wrong error and doesn't exercise the
      code path we care about.
      a55f575a
  11. Nov 13, 2017
  12. Nov 11, 2017
  13. Oct 26, 2017
  14. Oct 21, 2017
    • Arseny Kapoulkine's avatar
      tests: Add more move tests · b0fc587a
      Arseny Kapoulkine authored
      We now check that appending a child to a moved document performs no
      allocations - this is already the case, but if we neglected to copy the
      allocator state this test would fail.
      b0fc587a
  15. Sep 26, 2017
  16. Jun 23, 2017
  17. Jun 22, 2017
  18. Jun 19, 2017
  19. Jun 17, 2017
  20. Jun 16, 2017
Loading