From fdbf747a1bf97848ebd2c8f73d0353702c2c735a Mon Sep 17 00:00:00 2001 From: Michael Camilleri Date: Sat, 31 Aug 2019 01:20:10 +0900 Subject: [PATCH] Permit an empty reason-phrase element in HTTP lexer (#1313) The HTTP 1.1 spec permits empty reason-phrase elements in HTTP responses but the HTTP lexer requires a reason-phrase to be given. This commit removes that requirement. --- lib/rouge/lexers/http.rb | 2 +- spec/lexers/http_spec.rb | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/rouge/lexers/http.rb b/lib/rouge/lexers/http.rb index 93fcdc96fd..2e63e1ab93 100644 --- a/lib/rouge/lexers/http.rb +++ b/lib/rouge/lexers/http.rb @@ -42,7 +42,7 @@ def content_lexer rule %r( (HTTPS?)(/)(\d(?:\.\d))([ ]+) # http version (\d{3})([ ]+)? # status - ([^\r\n]+)?(\r?\n|$) # status message + ([^\r\n]*)?(\r?\n|$) # status message )x do groups( Keyword, Operator, Num, Text, diff --git a/spec/lexers/http_spec.rb b/spec/lexers/http_spec.rb index 7e5cbe0307..ad6e9f8e6a 100644 --- a/spec/lexers/http_spec.rb +++ b/spec/lexers/http_spec.rb @@ -5,7 +5,7 @@ let(:subject) { Rouge::Lexers::HTTP.new } include Support::Lexing - it 'lexes HTTP/2' do + it 'lexes a HTTP/2 request' do request = "GET / HTTP/2" assert_tokens_equal request, ["Name.Function", "GET"], ["Text", " "], @@ -16,7 +16,7 @@ ["Literal.Number", "2"] end - it 'lexes HTTP/1.1' do + it 'lexes a HTTP/1.1 request' do request = "GET / HTTP/1.1" assert_tokens_equal request, ["Name.Function", "GET"], ["Text", " "], @@ -26,4 +26,14 @@ ["Operator", "/"], ["Literal.Number", "1.1"] end + + it 'lexes an empty HTTP/1.1 response' do + response = "HTTP/1.1 200 " + assert_tokens_equal response, ["Keyword", "HTTP"], + ["Operator", "/"], + ["Literal.Number", "1.1"], + ["Text", " "], + ["Literal.Number", "200"], + ["Text", " "] + end end