|
|
31f0b41 |
From 0912f6869b1b8f3116b3540958a395b96d8909d0 Mon Sep 17 00:00:00 2001
|
|
|
31f0b41 |
From: Dylan Thacker-Smith <Dylan.Smith@shopify.com>
|
|
|
31f0b41 |
Date: Thu, 16 Sep 2021 18:46:07 -0400
|
|
|
31f0b41 |
Subject: [PATCH] Fix some internal errors in filters from invalid input.
|
|
|
31f0b41 |
|
|
|
31f0b41 |
These fixes came from improving the corresponding test, so these might not
|
|
|
31f0b41 |
actually be causing problems in practice.
|
|
|
31f0b41 |
---
|
|
|
31f0b41 |
History.md | 6 +++
|
|
|
31f0b41 |
lib/liquid/standardfilters.rb | 48 ++++++++++++++++--------
|
|
|
31f0b41 |
test/integration/standard_filter_test.rb | 23 +++++-------
|
|
|
31f0b41 |
3 files changed, 48 insertions(+), 29 deletions(-)
|
|
|
31f0b41 |
|
|
|
31f0b41 |
diff --git a/lib/liquid/standardfilters.rb b/lib/liquid/standardfilters.rb
|
|
|
31f0b41 |
index e7cb5c382..98e38f5f4 100644
|
|
|
31f0b41 |
--- a/lib/liquid/standardfilters.rb
|
|
|
31f0b41 |
+++ b/lib/liquid/standardfilters.rb
|
|
|
31f0b41 |
@@ -486,10 +498,16 @@ def apply_operation(input, operand, operation)
|
|
|
31f0b41 |
end
|
|
|
31f0b41 |
|
|
|
31f0b41 |
def nil_safe_compare(a, b)
|
|
|
31f0b41 |
- if !a.nil? && !b.nil?
|
|
|
31f0b41 |
- a <=> b
|
|
|
31f0b41 |
+ result = a <=> b
|
|
|
31f0b41 |
+
|
|
|
31f0b41 |
+ if result
|
|
|
31f0b41 |
+ result
|
|
|
31f0b41 |
+ elsif a.nil?
|
|
|
31f0b41 |
+ 1
|
|
|
31f0b41 |
+ elsif b.nil?
|
|
|
31f0b41 |
+ -1
|
|
|
31f0b41 |
else
|
|
|
31f0b41 |
- a.nil? ? 1 : -1
|
|
|
31f0b41 |
+ raise Liquid::ArgumentError, "cannot sort values of incompatible types"
|
|
|
31f0b41 |
end
|
|
|
31f0b41 |
end
|
|
|
31f0b41 |
|
|
|
31f0b41 |
diff --git a/test/integration/standard_filter_test.rb b/test/integration/standard_filter_test.rb
|
|
|
31f0b41 |
index f80d7ad0b..e7b34c164 100644
|
|
|
31f0b41 |
--- a/test/integration/standard_filter_test.rb
|
|
|
31f0b41 |
+++ b/test/integration/standard_filter_test.rb
|
|
|
31f0b41 |
@@ -259,8 +259,8 @@ def test_sort_when_property_is_sometimes_missing_puts_nils_last
|
|
|
31f0b41 |
{ "price" => 1, "handle" => "gamma" },
|
|
|
31f0b41 |
{ "price" => 2, "handle" => "epsilon" },
|
|
|
31f0b41 |
{ "price" => 4, "handle" => "alpha" },
|
|
|
31f0b41 |
- { "handle" => "delta" },
|
|
|
31f0b41 |
- { "handle" => "beta" }
|
|
|
31f0b41 |
+ { "handle" => "beta" },
|
|
|
31f0b41 |
+ { "handle" => "delta" }
|
|
|
31f0b41 |
]
|
|
|
31f0b41 |
assert_equal expectation, @filters.sort(input, "price")
|
|
|
31f0b41 |
end
|