I have a Sinatra app, and recently added a Rack gem (that we make) that intercepts an endpoint.
However, when I try to reach that endpoint, Sinatra gives me an error "can't modify frozen Hash" before any of my code appears to run. I'd appreciate any tips on where to start looking.
Here's my stack trace:
/bundle/gems/rack-protection-2.0.7/lib/rack/protection/xss_header.rb
in call
headers['X-Content-Type-Options'] ||= 'nosniff' if options[:nosniff]
/bundle/gems/rack-protection-2.0.7/lib/rack/protection/path_traversal.rb
in call
app.call env
/bundle/gems/rack-protection-2.0.7/lib/rack/protection/json_csrf.rb
in call
status, headers, body = app.call(env)
/bundle/gems/rack-protection-2.0.7/lib/rack/protection/base.rb
in call
result or app.call(env)
/bundle/gems/rack-protection-2.0.7/lib/rack/protection/base.rb
in call
result or app.call(env)
/bundle/gems/rack-protection-2.0.7/lib/rack/protection/frame_options.rb
in call
status, headers, body = @app.call(env)
/bundle/gems/rack-2.0.7/lib/rack/null_logger.rb
in call
@app.call(env)
/bundle/gems/rack-2.0.7/lib/rack/head.rb
in call
status, headers, body = @app.call(env)
/bundle/gems/sinatra-2.0.7/lib/sinatra/show_exceptions.rb
in call
@app.call(env)
/bundle/gems/sinatra-2.0.7/lib/sinatra/base.rb
in call
result, callback = app.call(env), env['async.callback']
/bundle/gems/sinatra-2.0.7/lib/sinatra/base.rb
in call
@stack.call(env)
/bundle/gems/rack-contrib-2.1.0/lib/rack/contrib/post_body_content_type_parser.rb
in call
@app.call(env)
/bundle/gems/rack-protection-2.0.7/lib/rack/protection/xss_header.rb
in call
status, headers, body = @app.call(env)
/bundle/gems/rack-protection-2.0.7/lib/rack/protection/path_traversal.rb
in call
app.call env
/bundle/gems/rack-protection-2.0.7/lib/rack/protection/json_csrf.rb
in call
status, headers, body = app.call(env)
/bundle/gems/rack-protection-2.0.7/lib/rack/protection/base.rb
in call
result or app.call(env)
/bundle/gems/rack-protection-2.0.7/lib/rack/protection/base.rb
in call
result or app.call(env)
/bundle/gems/rack-protection-2.0.7/lib/rack/protection/frame_options.rb
in call
status, headers, body = @app.call(env)
/bundle/gems/rack-2.0.7/lib/rack/logger.rb
in call
@app.call(env)
/bundle/gems/rack-2.0.7/lib/rack/common_logger.rb
in call
status, header, body = @app.call(env)
/bundle/gems/sinatra-2.0.7/lib/sinatra/base.rb
in call
call_without_check(env)
/bundle/gems/sinatra-2.0.7/lib/sinatra/base.rb
in call
env['sinatra.commonlogger'] ? @app.call(env) : super
/bundle/gems/rack-2.0.7/lib/rack/head.rb
in call
status, headers, body = @app.call(env)
/bundle/gems/rack-2.0.7/lib/rack/method_override.rb
in call
@app.call(env)
/bundle/gems/sinatra-2.0.7/lib/sinatra/show_exceptions.rb
in call
@app.call(env)
/bundle/gems/sinatra-2.0.7/lib/sinatra/base.rb
in call
result, callback = app.call(env), env['async.callback']
/bundle/gems/sinatra-2.0.7/lib/sinatra/base.rb
in call
@stack.call(env)
/bundle/gems/sinatra-2.0.7/lib/sinatra/base.rb
in block in call
synchronize { prototype.call(env) }
/bundle/gems/sinatra-2.0.7/lib/sinatra/base.rb
in synchronize
yield
/bundle/gems/sinatra-2.0.7/lib/sinatra/base.rb
in call
synchronize { prototype.call(env) }
/bundle/gems/puma-3.12.1/lib/puma/configuration.rb
in call
@app.call(env)
/bundle/gems/puma-3.12.1/lib/puma/server.rb
in handle_request
status, headers, res_body = @app.call(env)
/bundle/gems/puma-3.12.1/lib/puma/server.rb
in process_client
case handle_request(client, buffer)
/bundle/gems/puma-3.12.1/lib/puma/server.rb
in block in run
process_client client, buffer
/bundle/gems/puma-3.12.1/lib/puma/thread_pool.rb
in block in spawn_thread
block.call(work, *extra)