[javascriptlint-commit] SF.net SVN: javascriptlint:[385] trunk
Status: Beta
                
                Brought to you by:
                
                    matthiasmiller
                    
                
            | 
      
      
      From: <mat...@us...> - 2018-06-10 20:42:01
      
     | 
| Revision: 385
          http://sourceforge.net/p/javascriptlint/code/385
Author:   matthiasmiller
Date:     2018-06-10 20:41:58 +0000 (Sun, 10 Jun 2018)
Log Message:
-----------
Respect escaping within regular expressions.
Modified Paths:
--------------
    trunk/jsengine/parser/__init__.py
    trunk/jsengine/tokenizer/__init__.py
    trunk/tests/warnings/misplaced_regex.js
Modified: trunk/jsengine/parser/__init__.py
===================================================================
--- trunk/jsengine/parser/__init__.py	2018-06-10 20:26:59 UTC (rev 384)
+++ trunk/jsengine/parser/__init__.py	2018-06-10 20:41:58 UTC (rev 385)
@@ -853,6 +853,15 @@
             self.assertEqual(error.offset, 5)
         else:
             self.assert_(False)
+        try:
+            # Do not allow after an escape sequence, either.
+            parsestring('re = /[\\\n');
+        except JSSyntaxError as error:
+            self.assertEqual(error.offset, 5)
+        else:
+            self.assert_(False)
+    def testRegExpBugReport(self):
+        parsestring('validity = /[^\[\]/]/g')
     def testUnterminatedComment(self):
         try:
             parsestring('/*')
Modified: trunk/jsengine/tokenizer/__init__.py
===================================================================
--- trunk/jsengine/tokenizer/__init__.py	2018-06-10 20:26:59 UTC (rev 384)
+++ trunk/jsengine/tokenizer/__init__.py	2018-06-10 20:41:58 UTC (rev 385)
@@ -215,10 +215,16 @@
                     return Token(tok.ERROR)
             elif c == _Char.ord('['):
                 while True:
+                    # Handle escaped characters, but don't allow line breaks after the escape.
                     c = stream.readchr()
+                    escaped = False
+                    if c == _Char.ord('\\'):
+                        c = stream.readchr()
+                        escaped = True
+
                     if c == _Char.ord('\n'):
                         return Token(tok.ERROR)
-                    elif c == _Char.ord(']'):
+                    elif c == _Char.ord(']') and not escaped:
                         break
             elif c == _Char.ord('\n'):
                 return Token(tok.ERROR)
Modified: trunk/tests/warnings/misplaced_regex.js
===================================================================
--- trunk/tests/warnings/misplaced_regex.js	2018-06-10 20:26:59 UTC (rev 384)
+++ trunk/tests/warnings/misplaced_regex.js	2018-06-10 20:41:58 UTC (rev 385)
@@ -21,6 +21,9 @@
     i += /\/\./; /*warning:misplaced_regex*/
     i = -/.*/; /*warning:misplaced_regex*/
 
+    /* legal usage */
+    var validity = /[^\[\]/]/g;
+
     /* legal usage: return */
     return /\/\./;
 }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 |