diff --git a/go.mod b/go.mod index 159fe150..7a6c8047 100644 --- a/go.mod +++ b/go.mod @@ -65,7 +65,7 @@ require ( github.com/go-ruby-prime/prime v0.0.0-20260703153932-08f6fe218cd4 github.com/go-ruby-pstore/pstore v0.0.0-20260630081017-0dd55a12f94e github.com/go-ruby-public-suffix/public-suffix v0.0.0-20260630151503-f308d4002444 - github.com/go-ruby-rack/rack v0.0.0-20260703100219-0201e5681658 + github.com/go-ruby-rack/rack v0.0.0-20260704053028-640136bb67e7 github.com/go-ruby-redis/redis v0.0.0-20260701125752-5de216f6ad92 github.com/go-ruby-regexp/regexp v0.0.0-20260703193131-c52ca89ccd08 github.com/go-ruby-resolv/resolv v0.0.0-20260629153520-df410a5796ac @@ -91,7 +91,7 @@ require ( github.com/go-ruby-uri/uri v0.0.0-20260629113958-59633d1b0deb github.com/go-ruby-xslt/xslt v0.0.0-20260702171958-146eaf3f0176 github.com/go-ruby-yaml/yaml v0.0.0-20260629093916-8035038027bd - github.com/go-ruby-zlib/zlib v0.0.0-20260703175431-ca391423d5da + github.com/go-ruby-zlib/zlib v0.0.0-20260704053046-1ff8c43f4f67 ) require ( @@ -101,6 +101,7 @@ require ( github.com/go-composites/null v0.0.0-20260621061849-c8074799d5aa // indirect github.com/go-simd/adler32 v0.0.0-20260703095822-b2b45fec563b // indirect github.com/go-simd/base64 v0.0.0-20260703160615-1d0b2dddc996 // indirect + github.com/go-simd/crc32 v0.0.0-20260703213456-a1976694a16e // indirect github.com/go-simd/hex v0.0.0-20260627054622-d04d429c6aea // indirect github.com/google/uuid v1.6.0 // indirect github.com/klauspost/compress v1.18.7 // indirect diff --git a/go.sum b/go.sum index be5927d5..bb5f83bc 100644 --- a/go.sum +++ b/go.sum @@ -138,8 +138,8 @@ github.com/go-ruby-pstore/pstore v0.0.0-20260630081017-0dd55a12f94e h1:JmbJL+0nq github.com/go-ruby-pstore/pstore v0.0.0-20260630081017-0dd55a12f94e/go.mod h1:tbYmHYXjnNXJCNYABDx9nWfuGBCXeKrp134bNsQeTpM= github.com/go-ruby-public-suffix/public-suffix v0.0.0-20260630151503-f308d4002444 h1:vkMPJDpZHmu09pVxr7CFppoh1b5Kc8LkhKpxkSBoyxA= github.com/go-ruby-public-suffix/public-suffix v0.0.0-20260630151503-f308d4002444/go.mod h1:Wq3cgP6klsULbO4ee0DOavVIzifgmddOWnYpqljbER4= -github.com/go-ruby-rack/rack v0.0.0-20260703100219-0201e5681658 h1:IBLd1bBlCdCNH/xOSp6+AchixWQE1aMjtFYw4O2hhAg= -github.com/go-ruby-rack/rack v0.0.0-20260703100219-0201e5681658/go.mod h1:rKZ3vD81gJq61NvZ3XX9cr6AxtIV3+lFZKG7lPKV3PM= +github.com/go-ruby-rack/rack v0.0.0-20260704053028-640136bb67e7 h1:pGxohUY0tT+OSg6Vw91D+SaUxlvaeViZZavM1d0nZK4= +github.com/go-ruby-rack/rack v0.0.0-20260704053028-640136bb67e7/go.mod h1:rKZ3vD81gJq61NvZ3XX9cr6AxtIV3+lFZKG7lPKV3PM= github.com/go-ruby-redis/redis v0.0.0-20260701125752-5de216f6ad92 h1:EXqNsTpyz5KPZURl94uOjcIIyJ0mCyMA7/AFAXvFgdg= github.com/go-ruby-redis/redis v0.0.0-20260701125752-5de216f6ad92/go.mod h1:gt67ft80L9J5DpRGe+x3qPy2hg1g75aWQ6h52inm7og= github.com/go-ruby-regexp/regexp v0.0.0-20260703193131-c52ca89ccd08 h1:2ULLhB9SUBzHngWYrbltWEmt7jCbA1SvweZsmKwdilM= @@ -190,12 +190,14 @@ github.com/go-ruby-xslt/xslt v0.0.0-20260702171958-146eaf3f0176 h1:iHTCF/Eu0/lwO github.com/go-ruby-xslt/xslt v0.0.0-20260702171958-146eaf3f0176/go.mod h1:1C3Bx0pQIsqLqC2SnqV7pJnGuLJsgYmar2NrD+CmVXw= github.com/go-ruby-yaml/yaml v0.0.0-20260629093916-8035038027bd h1:4HGjgCdTIuIEM+iZXJ9hJJzt0IBMtxPqdJq72mr0Y64= github.com/go-ruby-yaml/yaml v0.0.0-20260629093916-8035038027bd/go.mod h1:HtbQgnZpSTJBAhPg1jOKgHycZl3tXgf9ZdOu4dnHWjQ= -github.com/go-ruby-zlib/zlib v0.0.0-20260703175431-ca391423d5da h1:zywLZX0cbGTeaCAYQ+4f62QSfzsizjwC+uSWM9X4+g0= -github.com/go-ruby-zlib/zlib v0.0.0-20260703175431-ca391423d5da/go.mod h1:iHbd2FflS5obgPpWsvJHUgNLkeZc6SrMiPcKsz7T8l0= +github.com/go-ruby-zlib/zlib v0.0.0-20260704053046-1ff8c43f4f67 h1:otTivF26XRtz1gM268+WgbB/3cPCpcOJvMJNnbbIDx0= +github.com/go-ruby-zlib/zlib v0.0.0-20260704053046-1ff8c43f4f67/go.mod h1:v32GgUrbHSFEHg4nerQESboO6b90fhovvtAXE0GrPRw= github.com/go-simd/adler32 v0.0.0-20260703095822-b2b45fec563b h1:mZiaZMwcLCZb9hoOXEUaZWgTpkMYtSeEfIaoIngt1eE= github.com/go-simd/adler32 v0.0.0-20260703095822-b2b45fec563b/go.mod h1:hu6jr9JjgDqUgOH0E/EB2YEl7JCDo6ofwnMlyxMdax4= github.com/go-simd/base64 v0.0.0-20260703160615-1d0b2dddc996 h1:q3fyZ61j/I6dilPPgLHSTohxpDXPewe4Nnp7FQ4oJgE= github.com/go-simd/base64 v0.0.0-20260703160615-1d0b2dddc996/go.mod h1:/nL/YHcchLkENbcFEEqAcfESIiwCM9/1H67LsSnd7EI= +github.com/go-simd/crc32 v0.0.0-20260703213456-a1976694a16e h1:TY/d8khTtjYFUKsKICVDm6bveIxVfuLHBRol9OmehsI= +github.com/go-simd/crc32 v0.0.0-20260703213456-a1976694a16e/go.mod h1:1N7DeFe7ILGSXGeqeifVxtpItIG7ZC+Y3flz37ZJhsM= github.com/go-simd/hex v0.0.0-20260627054622-d04d429c6aea h1:qVh9jV1QriPPfKtAb8au5pmVxKDk5Vl4nQUi/issQM0= github.com/go-simd/hex v0.0.0-20260627054622-d04d429c6aea/go.mod h1:q2/BdGuWJ9RahGzN+s+KtyacBAZFX15Nq0IikPFwKw0= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= diff --git a/internal/vm/rack_internal_test.go b/internal/vm/rack_internal_test.go index 9215e7e2..4779b60a 100644 --- a/internal/vm/rack_internal_test.go +++ b/internal/vm/rack_internal_test.go @@ -215,6 +215,13 @@ func TestRackUtils(t *testing.T) { {`require "rack/utils"; p Rack::Utils.forwarded_values(nil)`, "nil\n"}, {`require "rack/utils"; p Rack::Utils.forwarded_values(false)`, "nil\n"}, {`require "rack/utils"; p Rack::Utils.forwarded_values("cookie=x")`, "nil\n"}, + // Malformed unterminated-quote cases — MRI keeps the accumulated value + // as-is and leaves the remainder in the header; the leftover either + // yields an empty value or forms a bogus parameter that aborts to nil. + // (Verified against MRI ruby 4.0 rack: {for: [""]}, then nil.) + {`require "rack/utils"; p Rack::Utils.forwarded_values(%q{for="unterminated})`, `{for: [""]}` + "\n"}, + {`require "rack/utils"; p Rack::Utils.forwarded_values(%q{for="bad;proto=x})`, "nil\n"}, + {`require "rack/utils"; p Rack::Utils.forwarded_values(%q{proto="ok";for=1.2.3.4})`, `{proto: ["ok"], for: ["1.2.3.4"]}` + "\n"}, } for _, c := range cases { if got := eval(t, c.src); got != c.want {