summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Paysant-Le Roux <andi@splitbrain.org>2009-11-05 22:34:52 +0100
committerPierre Paysant-Le Roux <andi@splitbrain.org>2009-11-05 22:34:52 +0100
commitef457c67624460b5703178e7b11edc2f9fffda01 (patch)
treefc44af2ad6fd840f856adea46acd029c3390b1c1
parentfde10de4d3e3572d5078933f66833df24e1efc44 (diff)
downloadrpg-ef457c67624460b5703178e7b11edc2f9fffda01.tar.gz
rpg-ef457c67624460b5703178e7b11edc2f9fffda01.tar.bz2
Fix js_compress regexp detection
Ignore-this: ffb20375a09483502d61241d76877a8d darcs-hash:20091105213452-533a7-f09aca121cf24a8b6ad2d3448d058a846cb52182.gz
-rw-r--r--_test/cases/lib/exe/js_js_compress.test.php15
-rw-r--r--lib/exe/js.php8
2 files changed, 21 insertions, 2 deletions
diff --git a/_test/cases/lib/exe/js_js_compress.test.php b/_test/cases/lib/exe/js_js_compress.test.php
index bd00c9c4f..b7de9257d 100644
--- a/_test/cases/lib/exe/js_js_compress.test.php
+++ b/_test/cases/lib/exe/js_js_compress.test.php
@@ -44,6 +44,21 @@ class js_js_compress_test extends UnitTestCase {
$this->assertEqual(js_compress($text), 'foo.split(/[a-Z\/]*/);');
}
+ function test_regex_in_array(){
+ $text = '[/"/ , /"/ , /"/]';
+ $this->assertEqual(js_compress($text), '[/"/,/"/,/"/]');
+ }
+
+ function test_regex_in_hash(){
+ $text = '{ a : /"/ }';
+ $this->assertEqual(js_compress($text), '{a:/"/}');
+ }
+
+ function test_regex_preceded_by_spaces_caracters(){
+ $text = "text.replace( \t \r\n /\"/ , ".'"//" )';
+ $this->assertEqual(js_compress($text), 'text.replace(/"/,"//")');
+ }
+
function test_dquot1(){
$text = 'var foo="Now what \\" \'do we//get /*here*/ ?";';
$this->assertEqual(js_compress($text), $text);
diff --git a/lib/exe/js.php b/lib/exe/js.php
index 0888fa57f..ab67288cd 100644
--- a/lib/exe/js.php
+++ b/lib/exe/js.php
@@ -282,6 +282,10 @@ function js_compress($s){
// items that don't need spaces next to them
$chars = "^&|!+\-*\/%=\?:;,{}()<>% \t\n\r'\"[]";
+ $regex_starters = array("(", "=", "[", "," , ":");
+
+ $whitespaces_chars = array(" ", "\t", "\n", "\r", "\0", "\x0B");
+
while($i < $slen){
// skip all "boring" characters. This is either
// reserved word (e.g. "for", "else", "if") or a
@@ -312,10 +316,10 @@ function js_compress($s){
if($ch == '/'){
// rewind, skip white space
$j = 1;
- while($s{$i-$j} == ' '){
+ while(in_array($s{$i-$j}, $whitespaces_chars)){
$j = $j + 1;
}
- if( ($s{$i-$j} == '=') || ($s{$i-$j} == '(') ){
+ if( in_array($s{$i-$j}, $regex_starters) ){
// yes, this is an re
// now move forward and find the end of it
$j = 1;