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)