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
    • Arseny Kapoulkine's avatar
      XPath: Create set for a|b in order before duplicate filtering · 93c7bacb
      Arseny Kapoulkine authored
      This does not change the result of a union operation [substantially], but
      it means that we now give a list to remove_duplicates that has more natural
      ordering.
      
      If remove_duplicates didn't sort the array, we'd have union operations
      resulting in a consistent predictable order.
      
      Contributes to #254.
      93c7bacb
  2. Feb 06, 2019
  3. Jan 26, 2019
  4. Jan 20, 2019
  5. Jan 01, 2019
  6. Dec 10, 2018
  7. 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
    • Arseny Kapoulkine's avatar
      Enable config=sanitize in Travis CI · 1a9c3f66
      Arseny Kapoulkine authored
      This commit changes sanitize configuration to fail on the first error
      and ignore floating-point division and overflow "errors" that trigger
      when we test the corresponding functionality. This makes it possible to
      run this on all commits - if new UB or memory safety issues are introduced,
      asan/ubsan will catch them.
      1a9c3f66
  8. 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
  9. 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
  10. Nov 16, 2018
  11. Nov 12, 2018
  12. Oct 24, 2018
    • Arseny Kapoulkine's avatar
      XPath: Workaround Coverity false positive · d9fadc74
      Arseny Kapoulkine authored
      Coverity hits a similar false positive to what clang static analyzer hit
      - it assumes that since optimize() checks _right for being nullptr,
      optimize_self() might hit _right=nullptr in the ast_op_equal case which
      is impossible.
      
      Contributes to #236.
      d9fadc74
  13. Oct 16, 2018
    • Lipsa, Dan's avatar
      Remove warning in Visual Studio (#235) · 273fa0ab
      Lipsa, Dan authored
      The following warning is removed:
      Visual Studio 14.0
      1. warning C4275: non dll-interface class 'std::exception' used as
         base for dll-interface class 'vtkpugixml::xpath_exception'
      273fa0ab
  14. Sep 25, 2018
    • Arseny Kapoulkine's avatar
      Work around clang --analyze warnings · 81c82588
      Arseny Kapoulkine authored
      clang doesn't understand the invariants guaranteed for specific AST node
      types and, when seeing null pointer checks in optimize(), assumes any
      pointers in the node might be null. Work around this by adding explicit
      - redundant - null pointer checks.
      81c82588
    • Arseny Kapoulkine's avatar
      XPath: Refactor xpath_node_set short buffer optimization · e3b5e9ce
      Arseny Kapoulkine authored
      This change replaces xpath_node_set single element storage with a
      single-element array in hopes that this would silence Coverity false
      positive about getting a singleton pointer.
      
      Additionally, it refactors _assign member to unify small and large
      buffer codepaths since they are basically identical.
      
      Fixes #233 (hopefully)
      e3b5e9ce
  15. Aug 14, 2018
  16. Aug 08, 2018
  17. Jul 30, 2018
  18. Jul 28, 2018
  19. Jul 24, 2018
    • Arseny Kapoulkine's avatar
      Add .gitattributes file · f3139f4c
      Arseny Kapoulkine authored
      This makes sure the contents of tests/data/ folder does not go through
      newline conversion, which breaks tests that rely on some files having LF
      and some files having CR+LF.
      
      Fixes #222.
      f3139f4c
  20. Jul 23, 2018
  21. Jun 26, 2018
  22. Jun 20, 2018
  23. May 17, 2018
  24. Apr 27, 2018
    • Arseny Kapoulkine's avatar
      Move CMake build postfix setup behind an off-by-default USE_POSTFIX · 51322cff
      Arseny Kapoulkine authored
      This setup can interfere with existing workflows in two ways:
      
      - If the target application used CMake and configured custom postfixes,
      this change would override them
      
      - If the target application did *not* use CMake, it'd have to abide by
      these conventions even if the target configuration used is unexpected -
      for example, the default "preferred" configuration is frequently
      RelWithDebugInfo, not Release, which now has a postfix.
      
      Fixes #198.
      51322cff
  25. Apr 15, 2018
  26. Apr 12, 2018
Loading