http://bugzilla.novell.com/show_bug.cgi?id=577346

http://bugzilla.novell.com/show_bug.cgi?id=577346#c2


--- Comment #2 from Miguel de Icaza <[email protected]> 2010-07-19 23:49:13 UTC 
---
It seems like the only way to solve this will be to scan the regular expression
twice and cant be done with a single pass.


I tried this change in parse.cs's ParseEscape:


                //
                // It could be an octal value that starts with
                // a digit, as long as the \N is less than the number
                // of capture groups
                //
            case '1': case '2': case '3': case '4': case '5':
            case '6': case '7': {
                    ptr--;
                    int oprevptr = ptr;
                    int dresult = ParseDecimal (pattern, ref ptr);

                    // If it is a backreference, let the ParseSpecial handle
it.
                    if (dresult < 10 || dresult <= caps.Count){
                        ptr = p;
                        return -1;
                    }
                    ptr = oprevptr;
                    return ParseOctal (pattern, ref ptr);
                }

But this change breaks with a regular expression like this (it currently
passes):

Matching input 'aa' against pattern '\10((((((((((a))))))))))' with options
'RightToLeft'

The above change is also wrong in that it ignores the Options = EcmaScript that
would use the old interpretation.

Alternatively, we could fix this by changing the backreferences into characters
in the resolve phase after the parsing is complete.

-- 
Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to