1
0
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:
Robert Krimen 2012-10-20 12:55:29 -07:00
parent 1975167037
commit 3a6dcf46ef
7 changed files with 19 additions and 9 deletions

View File

@ -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 $<

View File

@ -3,6 +3,8 @@
use strict;
use warnings;
$| = 1;
my $passed = 0;
while (<STDIN>) {
chomp;

View File

@ -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

View File

@ -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:

View File

@ -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) {

View File

@ -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
}

View File

@ -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)
}