mirror of
https://github.com/discourse/discourse.git
synced 2024-11-30 09:53:43 +08:00
30990006a9
This reduces chances of errors where consumers of strings mutate inputs and reduces memory usage of the app. Test suite passes now, but there may be some stuff left, so we will run a few sites on a branch prior to merging
45 lines
959 B
Ruby
45 lines
959 B
Ruby
# frozen_string_literal: true
|
|
|
|
# patch https://github.com/rack/rack/pull/600
|
|
#
|
|
class Rack::ETag
|
|
private
|
|
|
|
def digest_body(body)
|
|
parts = []
|
|
has_body = false
|
|
|
|
body.each do |part|
|
|
parts << part
|
|
has_body ||= part.length > 0
|
|
end
|
|
|
|
hexdigest =
|
|
if has_body
|
|
digest = Digest::MD5.new
|
|
parts.each { |part| digest << part }
|
|
digest.hexdigest
|
|
end
|
|
|
|
[hexdigest, parts]
|
|
end
|
|
end
|
|
|
|
# patch https://github.com/rack/rack/pull/596
|
|
#
|
|
class Rack::ConditionalGet
|
|
private
|
|
def to_rfc2822(since)
|
|
# shortest possible valid date is the obsolete: 1 Nov 97 09:55 A
|
|
# anything shorter is invalid, this avoids exceptions for common cases
|
|
# most common being the empty string
|
|
if since && since.length >= 16
|
|
# NOTE: there is no trivial way to write this in a non execption way
|
|
# _rfc2822 returns a hash but is not that usable
|
|
Time.rfc2822(since) rescue nil
|
|
else
|
|
nil
|
|
end
|
|
end
|
|
end
|