From 37d22856bf910574e01758cc005e7dcd26b15d8f Mon Sep 17 00:00:00 2001 From: Allison Reid Date: Fri, 14 Jan 2022 19:53:10 -0800 Subject: [PATCH] Explicitly freeze concatenated-`String` constants to unbreak on non-main `Ractor`s. --- lib/addressable/uri.rb | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/lib/addressable/uri.rb b/lib/addressable/uri.rb index e8d6c429..9a41a893 100644 --- a/lib/addressable/uri.rb +++ b/lib/addressable/uri.rb @@ -38,20 +38,26 @@ class InvalidURIError < StandardError ## # Container for the character classes specified in # RFC 3986. + # + # Note: Concatenated and interpolated `String`s are not affected by the + # `frozen_string_literal` directive and must be frozen explicitly. + # + # Interpolated `String`s *were* frozen this way before Ruby 3.0: + # https://bugs.ruby-lang.org/issues/17104 module CharacterClasses ALPHA = "a-zA-Z" DIGIT = "0-9" GEN_DELIMS = "\\:\\/\\?\\#\\[\\]\\@" SUB_DELIMS = "\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=" - RESERVED = GEN_DELIMS + SUB_DELIMS - UNRESERVED = ALPHA + DIGIT + "\\-\\.\\_\\~" - PCHAR = UNRESERVED + SUB_DELIMS + "\\:\\@" - SCHEME = ALPHA + DIGIT + "\\-\\+\\." - HOST = UNRESERVED + SUB_DELIMS + "\\[\\:\\]" - AUTHORITY = PCHAR + "\\[\\:\\]" - PATH = PCHAR + "\\/" - QUERY = PCHAR + "\\/\\?" - FRAGMENT = PCHAR + "\\/\\?" + RESERVED = %q{GEN_DELIMS SUB_DELIMS}.freeze + UNRESERVED = %q{ALPHA DIGIT "\\-\\.\\_\\~"}.freeze + PCHAR = %q{UNRESERVED SUB_DELIMS "\\:\\@"}.freeze + SCHEME = %q{ALPHA DIGIT "\\-\\+\\."}.freeze + HOST = %q{UNRESERVED SUB_DELIMS "\\[\\:\\]"}.freeze + AUTHORITY = %q{PCHAR "\\[\\:\\]"}.freeze + PATH = %q{PCHAR "\\/"}.freeze + QUERY = %q{PCHAR "\\/\\?"}.freeze + FRAGMENT = %q{PCHAR "\\/\\?"}.freeze end module NormalizeCharacterClasses