From 4f5feac0dffe2e8b4ae1cb32670e4902fab11ccc Mon Sep 17 00:00:00 2001 From: Brandon Williams Date: Tue, 22 Mar 2022 16:51:28 -0500 Subject: [PATCH] Fix timestamp tz parsing Patch by brandonwilliams; reviewed by bereng for CASSANDRA-17467 --- CHANGES.txt | 1 + .../apache/cassandra/serializers/TimestampSerializer.java | 5 +++-- .../cassandra/serializers/TimestampSerializerTest.java | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 5b13f9b90d51..1bdf518b46ca 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 4.0.4 + * Fix timestamp tz parsing (CASSANDRA-17467) * Suppress CVE-2021-44521 from driver (CASSANDRA-17459) * Upgrade jackson to 2.13.2 (CASSANDRA-17460) * Make sstableloader honour native port option (CASSANDRA-17210) diff --git a/src/java/org/apache/cassandra/serializers/TimestampSerializer.java b/src/java/org/apache/cassandra/serializers/TimestampSerializer.java index ab048d0e6288..21cac667e4e8 100644 --- a/src/java/org/apache/cassandra/serializers/TimestampSerializer.java +++ b/src/java/org/apache/cassandra/serializers/TimestampSerializer.java @@ -53,9 +53,10 @@ private static List generateFormatters() final String[] offsetFormats = new String[] { " z", - "X", " zzzz", - "XXX" + " X", + "X", + "XXX", }; for (String dateTimeFormat: dateTimeFormats) diff --git a/test/unit/org/apache/cassandra/serializers/TimestampSerializerTest.java b/test/unit/org/apache/cassandra/serializers/TimestampSerializerTest.java index e9ae26677fef..ac63f31d6ac1 100644 --- a/test/unit/org/apache/cassandra/serializers/TimestampSerializerTest.java +++ b/test/unit/org/apache/cassandra/serializers/TimestampSerializerTest.java @@ -127,7 +127,11 @@ public void testGeneralTimeZoneFormats() final long cstOffset = 6 * ONE_HOUR; validateStringTimestamp("1970-01-01 00:00:00 Central Standard Time", cstOffset); validateStringTimestamp("1970-01-01 00:00:00 CST", cstOffset); + validateStringTimestamp("1970-01-01 00:00:00 -0600", cstOffset); + validateStringTimestamp("1970-01-01 00:00:00-0600", cstOffset); validateStringTimestamp("1970-01-01T00:00:00 GMT-06:00", cstOffset); + validateStringTimestamp("1970-01-01T00:00:00 -0600", cstOffset); + validateStringTimestamp("1970-01-01T00:00:00-0600", cstOffset); } @Test