Selaa lähdekoodia

LibJS: Actually escape \n|\r|LS|PS when escaping RegExp.source

We were previously encoding them as `\<literal newline>`, which is just
all sorts of wrong :P
Ali Mohammad Pur 2 vuotta sitten
vanhempi
commit
b409a40377
1 muutettua tiedostoa jossa 19 lisäystä ja 3 poistoa
  1. 19 3
      Userland/Libraries/LibJS/Runtime/RegExpObject.cpp

+ 19 - 3
Userland/Libraries/LibJS/Runtime/RegExpObject.cpp

@@ -266,10 +266,26 @@ DeprecatedString RegExpObject::escape_regexp_pattern() const
             continue;
             continue;
         }
         }
 
 
-        if (code_point == '\r' || code_point == LINE_SEPARATOR || code_point == PARAGRAPH_SEPARATOR || code_point == '/') {
-            builder.append_code_point('\\');
+        switch (code_point) {
+        case '/':
+            builder.append("\\/"sv);
+            break;
+        case '\n':
+            builder.append("\\n"sv);
+            break;
+        case '\r':
+            builder.append("\\r"sv);
+            break;
+        case LINE_SEPARATOR:
+            builder.append("\\u2028"sv);
+            break;
+        case PARAGRAPH_SEPARATOR:
+            builder.append("\\u2029"sv);
+            break;
+        default:
+            builder.append_code_point(code_point);
+            break;
         }
         }
-        builder.append_code_point(code_point);
     }
     }
 
 
     return builder.to_deprecated_string();
     return builder.to_deprecated_string();