From 1425c52227045fac17764b426a90d1b4ac369ba0 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 9 Mar 2026 17:26:02 +0900 Subject: Parse ISO8601 datetimes without Time.parse --- lib/rubygems/yaml_serializer.rb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/rubygems/yaml_serializer.rb b/lib/rubygems/yaml_serializer.rb index 28616cdfde..edc0133ce2 100644 --- a/lib/rubygems/yaml_serializer.rb +++ b/lib/rubygems/yaml_serializer.rb @@ -271,12 +271,16 @@ module Gem return Sequence.new if inner.empty? items = inner.split(/\s*,\s*/).reject(&:empty?).map {|e| Scalar.new(value: coerce(e)) } Sequence.new(items: items) - elsif /^\d{4}-\d{2}-\d{2}/.match?(val) - require "time" + elsif /\A\d{4}-\d{2}-\d{2}([ T]\d{2}:\d{2}:\d{2})?/.match?(val) begin - Time.parse(val) + Time.new(val) rescue ArgumentError - val + # date-only format like "2024-06-15" is not supported by Time.new + if /\A(\d{4})-(\d{2})-(\d{2})\z/.match(val) + Time.utc($1.to_i, $2.to_i, $3.to_i) + else + val + end end elsif /^-?\d+$/.match?(val) val.to_i -- cgit v1.2.3