lib/rswag/api/middleware.rb in rswag-api-2.9.0 vs lib/rswag/api/middleware.rb in rswag-api-2.10.0
- old
+ new
@@ -11,10 +11,15 @@
@config = config
end
def call(env)
path = env['PATH_INFO']
- filename = "#{@config.resolve_swagger_root(env)}/#{path}"
+ # Sanitize the filename for directory traversal by expanding, and ensuring
+ # its starts with the root directory.
+ filename = File.expand_path(path, @config.resolve_swagger_root(env))
+ unless filename.start_with? @config.resolve_swagger_root(env)
+ return @app.call(env)
+ end
if env['REQUEST_METHOD'] == 'GET' && File.file?(filename)
swagger = parse_file(filename)
@config.swagger_filter.call(swagger, env) unless @config.swagger_filter.nil?
mime = Rack::Mime.mime_type(::File.extname(path), 'text/plain')