From e81d2f25b497ab9f7ae9be2eeafb1884bf1a929f Mon Sep 17 00:00:00 2001 From: Shubham Padkonde Date: Wed, 16 Sep 2026 14:12:59 +0530 Subject: [PATCH] Parse negative Unix timestamp strings in the date filter --- lib/liquid/utils.rb | 2 +- test/integration/standard_filter_test.rb | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/liquid/utils.rb b/lib/liquid/utils.rb index 084739a21..8471d3846 100644 --- a/lib/liquid/utils.rb +++ b/lib/liquid/utils.rb @@ -3,7 +3,7 @@ module Liquid module Utils DECIMAL_REGEX = /\A-?\d+\.\d+\z/ - UNIX_TIMESTAMP_REGEX = /\A\d+\z/ + UNIX_TIMESTAMP_REGEX = /\A-?\d+\z/ def self.slice_collection(collection, from, to) if (from != 0 || !to.nil?) && collection.respond_to?(:load_slice) diff --git a/test/integration/standard_filter_test.rb b/test/integration/standard_filter_test.rb index 94097ae1f..39a1d9512 100644 --- a/test/integration/standard_filter_test.rb +++ b/test/integration/standard_filter_test.rb @@ -627,6 +627,15 @@ def test_date end end + def test_date_with_negative_unix_timestamp_string + with_timezone("UTC") do + assert_equal("12/31/1969", @filters.date(-1, "%m/%d/%Y")) + assert_equal("12/31/1969", @filters.date("-1", "%m/%d/%Y")) + assert_equal("01/01/1900", @filters.date("-2208988800", "%m/%d/%Y")) + assert_template_result("12/31/1969", '{{ timestamp | date: "%m/%d/%Y" }}', { 'timestamp' => '-1' }) + end + end + def test_first_last assert_equal(1, @filters.first([1, 2, 3])) assert_equal(3, @filters.last([1, 2, 3]))