mirror of
https://github.com/robertkrimen/otto
synced 2025-09-28 18:45:22 +08:00
Don't expose re2 regular expression via //.source
This commit is contained in:
parent
1975167037
commit
3a6dcf46ef
|
@ -37,9 +37,11 @@ gauntlet:
|
||||||
try: .fail
|
try: .fail
|
||||||
head $<
|
head $<
|
||||||
cat shim.js $< | $(otto)
|
cat shim.js $< | $(otto)
|
||||||
|
@echo PASS
|
||||||
|
|
||||||
try-tmp: tmp
|
try-tmp: tmp
|
||||||
cat shim.js $< | $(otto)
|
cat shim.js $< | $(otto)
|
||||||
|
@echo PASS
|
||||||
|
|
||||||
look: .fail
|
look: .fail
|
||||||
cat $<
|
cat $<
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
|
$| = 1;
|
||||||
|
|
||||||
my $passed = 0;
|
my $passed = 0;
|
||||||
while (<STDIN>) {
|
while (<STDIN>) {
|
||||||
chomp;
|
chomp;
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -17,7 +17,6 @@ TEST := -v --run ParseSuccess
|
||||||
TEST := -v --run OttoError
|
TEST := -v --run OttoError
|
||||||
TEST := -v --run API
|
TEST := -v --run API
|
||||||
TEST := -v --run IsValidRegExp
|
TEST := -v --run IsValidRegExp
|
||||||
TEST := -v --run RegExp
|
|
||||||
TEST := -v --run SwitchBreak
|
TEST := -v --run SwitchBreak
|
||||||
TEST := -v --run Unicode
|
TEST := -v --run Unicode
|
||||||
TEST := -v --run _issue
|
TEST := -v --run _issue
|
||||||
|
@ -26,6 +25,7 @@ TEST := -v --run ParseFailure
|
||||||
TEST := -v --run Lexer\|Parse
|
TEST := -v --run Lexer\|Parse
|
||||||
TEST := -v --run Lexer
|
TEST := -v --run Lexer
|
||||||
TEST := -v --run String_
|
TEST := -v --run String_
|
||||||
|
TEST := -v --run RegExp
|
||||||
TEST := .
|
TEST := .
|
||||||
|
|
||||||
test: test-i
|
test: test-i
|
||||||
|
|
4
lexer.go
4
lexer.go
|
@ -288,8 +288,6 @@ func (self *_lexer) scanQuoteLiteral() _token {
|
||||||
text.WriteRune('\v')
|
text.WriteRune('\v')
|
||||||
case '0':
|
case '0':
|
||||||
text.WriteRune(0)
|
text.WriteRune(0)
|
||||||
default:
|
|
||||||
text.WriteRune(value)
|
|
||||||
case 'u':
|
case 'u':
|
||||||
result := self.scanHexadecimalRune(4)
|
result := self.scanHexadecimalRune(4)
|
||||||
if result != utf8.RuneError {
|
if result != utf8.RuneError {
|
||||||
|
@ -305,6 +303,8 @@ func (self *_lexer) scanQuoteLiteral() _token {
|
||||||
} else {
|
} else {
|
||||||
text.WriteRune(value)
|
text.WriteRune(value)
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
|
text.WriteRune(value)
|
||||||
}
|
}
|
||||||
// TODO Octal escaping
|
// TODO Octal escaping
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -1562,6 +1562,8 @@ func TestRegExp(t *testing.T) {
|
||||||
Is(result._object().Get("1"), "undefined")
|
Is(result._object().Get("1"), "undefined")
|
||||||
Is(result._object().Get("2"), "b")
|
Is(result._object().Get("2"), "b")
|
||||||
Is(result._object().Get("length"), "3")
|
Is(result._object().Get("length"), "3")
|
||||||
|
|
||||||
|
test(`/\u0041/.source`, "\\u0041")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNewFunction(t *testing.T) {
|
func TestNewFunction(t *testing.T) {
|
||||||
|
|
|
@ -76,13 +76,17 @@ func (self *_parser) ParseRegExpLiteral(token _token) *_regExpNode {
|
||||||
flags = self.Consume()
|
flags = self.Consume()
|
||||||
}
|
}
|
||||||
|
|
||||||
pattern_ := transformRegExp(pattern)
|
{
|
||||||
_, err := regexp.Compile(pattern_)
|
// Test during parsing that this is a valid regular expression
|
||||||
if err != nil {
|
// Sorry, (?=) and (?!) are invalid (for now)
|
||||||
panic(token.newSyntaxError("Invalid regular expression: %s", err.Error()[22:])) // Skip redundant "parse regexp error"
|
pattern := transformRegExp(pattern)
|
||||||
|
_, err := regexp.Compile(pattern)
|
||||||
|
if err != nil {
|
||||||
|
panic(token.newSyntaxError("Invalid regular expression: %s", err.Error()[22:])) // Skip redundant "parse regexp error"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
node := newRegExpNode(pattern_, flags)
|
node := newRegExpNode(pattern, flags)
|
||||||
self.markNode(node)
|
self.markNode(node)
|
||||||
return node
|
return node
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ func (runtime *_runtime) newRegExpObject(pattern string, flags string) *_object
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
re2pattern := pattern // Uhh, ...
|
re2pattern := transformRegExp(pattern)
|
||||||
if len(re2flags) > 0 {
|
if len(re2flags) > 0 {
|
||||||
re2pattern = fmt.Sprintf("(?%s:%s)", re2flags, re2pattern)
|
re2pattern = fmt.Sprintf("(?%s:%s)", re2flags, re2pattern)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user