From 7e72285049e02389c95f656dbedca612fd413e1e Mon Sep 17 00:00:00 2001 From: AnotherTest Date: Mon, 31 Aug 2020 19:24:46 +0430 Subject: [PATCH] Userland: Allow unquoted 'filename' values in 'pro' --- Userland/pro.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Userland/pro.cpp b/Userland/pro.cpp index 6cc306f317..4fc19dd067 100644 --- a/Userland/pro.cpp +++ b/Userland/pro.cpp @@ -57,7 +57,16 @@ public: if (lexer.consume_specific(";")) { lexer.ignore_while(is_whitespace); if (lexer.consume_specific("filename=")) { - m_filename = lexer.consume_quoted_string(); + // RFC 2183: "A short (length <= 78 characters) + // parameter value containing only non-`tspecials' characters SHOULD be + // represented as a single `token'." + // Some people seem to take this as generic advice of "if it doesn't have special characters, + // it's safe to specify as a single token" + // So let's just be as lenient as possible. + if (lexer.next_is('"')) + m_filename = lexer.consume_quoted_string(); + else + m_filename = lexer.consume_until(is_any_of("()<>@,;:\\\"/[]?= ")); } else { m_might_be_wrong = true; } @@ -72,7 +81,10 @@ public: if (lexer.consume_specific("name=")) { m_name = lexer.consume_quoted_string(); } else if (lexer.consume_specific("filename=")) { - m_filename = lexer.consume_quoted_string(); + if (lexer.next_is('"')) + m_filename = lexer.consume_quoted_string(); + else + m_filename = lexer.consume_until(is_any_of("()<>@,;:\\\"/[]?= ")); } else { m_might_be_wrong = true; }