Module: wine Branch: master Commit: 36391faf45677cc867085384a97e6f4f4adba271 URL: http://source.winehq.org/git/wine.git/?a=commit;h=36391faf45677cc867085384a9...
Author: Peter Urbanec winehq.org@urbanec.net Date: Fri Feb 18 21:05:46 2011 +1100
jscript: Implement character escaping as described by ECMA-262 B.2.1.
---
dlls/jscript/global.c | 13 +++++++++---- 1 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c index 24698ac..ebfc55c 100644 --- a/dlls/jscript/global.c +++ b/dlls/jscript/global.c @@ -99,6 +99,13 @@ static inline BOOL is_uri_unescaped(WCHAR c) return c < 128 && uri_char_table[c] == 2; }
+/* Check that the character is one of the 69 nonblank characters as defined by ECMA-262 B.2.1 */ +static inline BOOL is_ecma_nonblank(const WCHAR c) +{ + return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || + c == '@' || c == '*' || c == '_' || c == '+' || c == '-' || c == '.' || c == '/'); +} + static WCHAR int_to_char(int i) { if(i < 10) @@ -290,8 +297,7 @@ static HRESULT JSGlobal_escape(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, D for(ptr=str; *ptr; ptr++) { if(*ptr > 0xff) len += 6; - else if(isalnum((unsigned char)*ptr) || *ptr=='*' || *ptr=='@' || *ptr=='-' - || *ptr=='_' || *ptr=='+' || *ptr=='.' || *ptr=='/') + else if(is_ecma_nonblank(*ptr)) len++; else len += 3; @@ -313,8 +319,7 @@ static HRESULT JSGlobal_escape(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, D ret[len++] = int_to_char((*ptr >> 4) & 0xf); ret[len++] = int_to_char(*ptr & 0xf); } - else if(isalnum((char)*ptr) || *ptr=='*' || *ptr=='@' || *ptr=='-' - || *ptr=='_' || *ptr=='+' || *ptr=='.' || *ptr=='/') + else if(is_ecma_nonblank(*ptr)) ret[len++] = *ptr; else { ret[len++] = '%';