Peter Urbanec : jscript: Implement character escaping as described by ECMA-262 B.2.1.

Alexandre Julliard julliard at winehq.org
Fri Feb 18 10:50:18 CST 2011


Module: wine
Branch: master
Commit: 36391faf45677cc867085384a97e6f4f4adba271
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=36391faf45677cc867085384a97e6f4f4adba271

Author: Peter Urbanec <winehq.org at 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++] = '%';




More information about the wine-cvs mailing list