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
|
||||
head $<
|
||||
cat shim.js $< | $(otto)
|
||||
@echo PASS
|
||||
|
||||
try-tmp: tmp
|
||||
cat shim.js $< | $(otto)
|
||||
@echo PASS
|
||||
|
||||
look: .fail
|
||||
cat $<
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
use strict;
|
||||
use warnings;
|
||||
|
||||
$| = 1;
|
||||
|
||||
my $passed = 0;
|
||||
while (<STDIN>) {
|
||||
chomp;
|
||||
|
|
2
Makefile
2
Makefile
|
@ -17,7 +17,6 @@ TEST := -v --run ParseSuccess
|
|||
TEST := -v --run OttoError
|
||||
TEST := -v --run API
|
||||
TEST := -v --run IsValidRegExp
|
||||
TEST := -v --run RegExp
|
||||
TEST := -v --run SwitchBreak
|
||||
TEST := -v --run Unicode
|
||||
TEST := -v --run _issue
|
||||
|
@ -26,6 +25,7 @@ TEST := -v --run ParseFailure
|
|||
TEST := -v --run Lexer\|Parse
|
||||
TEST := -v --run Lexer
|
||||
TEST := -v --run String_
|
||||
TEST := -v --run RegExp
|
||||
TEST := .
|
||||
|
||||
test: test-i
|
||||
|
|
4
lexer.go
4
lexer.go
|
@ -288,8 +288,6 @@ func (self *_lexer) scanQuoteLiteral() _token {
|
|||
text.WriteRune('\v')
|
||||
case '0':
|
||||
text.WriteRune(0)
|
||||
default:
|
||||
text.WriteRune(value)
|
||||
case 'u':
|
||||
result := self.scanHexadecimalRune(4)
|
||||
if result != utf8.RuneError {
|
||||
|
@ -305,6 +303,8 @@ func (self *_lexer) scanQuoteLiteral() _token {
|
|||
} else {
|
||||
text.WriteRune(value)
|
||||
}
|
||||
default:
|
||||
text.WriteRune(value)
|
||||
}
|
||||
// TODO Octal escaping
|
||||
default:
|
||||
|
|
|
@ -1562,6 +1562,8 @@ func TestRegExp(t *testing.T) {
|
|||
Is(result._object().Get("1"), "undefined")
|
||||
Is(result._object().Get("2"), "b")
|
||||
Is(result._object().Get("length"), "3")
|
||||
|
||||
test(`/\u0041/.source`, "\\u0041")
|
||||
}
|
||||
|
||||
func TestNewFunction(t *testing.T) {
|
||||
|
|
|
@ -76,13 +76,17 @@ func (self *_parser) ParseRegExpLiteral(token _token) *_regExpNode {
|
|||
flags = self.Consume()
|
||||
}
|
||||
|
||||
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"
|
||||
{
|
||||
// Test during parsing that this is a valid regular expression
|
||||
// Sorry, (?=) and (?!) are invalid (for now)
|
||||
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)
|
||||
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 {
|
||||
re2pattern = fmt.Sprintf("(?%s:%s)", re2flags, re2pattern)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user