From 035a0db6ab7d59c865f68340892b53db66165c3f Mon Sep 17 00:00:00 2001 From: Marco Concetto Rudilosso Date: Wed, 2 Apr 2025 11:01:51 +0200 Subject: [PATCH] Make all array filters that use `filter_array` util process empty string and nil correctly --- lib/liquid/standardfilters.rb | 5 ++++- test/integration/standard_filter_test.rb | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/liquid/standardfilters.rb b/lib/liquid/standardfilters.rb index 4771b242..87a306b1 100644 --- a/lib/liquid/standardfilters.rb +++ b/lib/liquid/standardfilters.rb @@ -986,8 +986,11 @@ module Liquid attr_reader :context def filter_array(input, property, target_value, default_value = [], &block) + if property.nil? + raise_property_error(property) + end + property = Liquid::Utils.to_s(property) - return default_value if property.empty? ary = InputIterator.new(input, context) return default_value if ary.empty? diff --git a/test/integration/standard_filter_test.rb b/test/integration/standard_filter_test.rb index 5c80fe3c..13369541 100644 --- a/test/integration/standard_filter_test.rb +++ b/test/integration/standard_filter_test.rb @@ -1033,6 +1033,24 @@ class StandardFiltersTest < Minitest::Test assert_template_result(expected_output, template, { "array" => array }) end + def test_where_with_empty_string_and_nil + array = [ + "alpha", + "beta", + "gamma", + ] + template = "{{ array | where: '' | join: ' ' }}" + expected_output = "alpha beta gamma" + assert_template_result(expected_output, template, { "array" => array }) + + template = "{{ array | where: nil | join: ' ' }}" + exception = assert_raises(Liquid::ArgumentError) do + assert_template_result(expected_output, template, { "array" => array }) + end + + assert_equal("Liquid error (line 1): cannot select the property ''", exception.message) + end + def test_where_with_value array = [ { "handle" => "alpha", "ok" => true },