private static string Encode(object uri, URISetType flags)
        {
            string        str = Microsoft.JScript.Convert.ToString(uri);
            StringBuilder bs  = new StringBuilder();

            for (int i = 0; i < str.Length; i++)
            {
                char ch = str[i];
                if (InURISet(ch, flags))
                {
                    bs.Append(ch);
                }
                else
                {
                    int num2 = ch;
                    if ((num2 >= 0) && (num2 <= 0x7f))
                    {
                        AppendInHex(bs, num2);
                    }
                    else if ((num2 >= 0x80) && (num2 <= 0x7ff))
                    {
                        AppendInHex(bs, (num2 >> 6) | 0xc0);
                        AppendInHex(bs, (num2 & 0x3f) | 0x80);
                    }
                    else if ((num2 < 0xd800) || (num2 > 0xdfff))
                    {
                        AppendInHex(bs, (num2 >> 12) | 0xe0);
                        AppendInHex(bs, ((num2 >> 6) & 0x3f) | 0x80);
                        AppendInHex(bs, (num2 & 0x3f) | 0x80);
                    }
                    else
                    {
                        if ((num2 >= 0xdc00) && (num2 <= 0xdfff))
                        {
                            throw new JScriptException(JSError.URIEncodeError);
                        }
                        if (++i >= str.Length)
                        {
                            throw new JScriptException(JSError.URIEncodeError);
                        }
                        int num3 = str[i];
                        if ((num3 < 0xdc00) || (num3 > 0xdfff))
                        {
                            throw new JScriptException(JSError.URIEncodeError);
                        }
                        num2 = (((num2 - 0xd800) << 10) + num3) + 0x2400;
                        AppendInHex(bs, (num2 >> 0x12) | 240);
                        AppendInHex(bs, ((num2 >> 12) & 0x3f) | 0x80);
                        AppendInHex(bs, ((num2 >> 6) & 0x3f) | 0x80);
                        AppendInHex(bs, (num2 & 0x3f) | 0x80);
                    }
                }
            }
            return(bs.ToString());
        }
Ejemplo n.º 2
0
        private static String Encode(Object uri, URISetType flags)
        {
            String        uriStr    = Convert.ToString(uri);
            StringBuilder resultStr = new StringBuilder();

            for (int i = 0; i < uriStr.Length; i++)
            {
                char ch = uriStr[i];
                if (GlobalObject.InURISet(ch, flags))
                {
                    resultStr.Append(ch);
                }
                else
                {
                    int value = (int)ch;
                    if (value >= 0 && value <= 0x7F)
                    {
                        GlobalObject.AppendInHex(resultStr, value);
                    }
                    else if (value >= 0x0080 && value <= 0x07FF)
                    {
                        GlobalObject.AppendInHex(resultStr, value >> 6 | 0xC0);
                        GlobalObject.AppendInHex(resultStr, value & 0x3F | 0x80);
                    }
                    else if (value < 0xD800 || value > 0xDFFF)
                    {
                        GlobalObject.AppendInHex(resultStr, value >> 12 | 0xE0);
                        GlobalObject.AppendInHex(resultStr, value >> 6 & 0x3F | 0x80);
                        GlobalObject.AppendInHex(resultStr, value & 0x3F | 0x80);
                    }
                    else
                    {
                        if (value >= 0xDC00 && value <= 0xDFFF)
                        {
                            throw new JScriptException(JSError.URIEncodeError);
                        }
                        if (++i >= uriStr.Length)
                        {
                            throw new JScriptException(JSError.URIEncodeError);
                        }
                        int value1 = (int)uriStr[i];
                        if (value1 < 0xDC00 || value1 > 0xDFFF)
                        {
                            throw new JScriptException(JSError.URIEncodeError);
                        }
                        value = (value - 0xD800 << 10) + value1 + 0x2400;
                        GlobalObject.AppendInHex(resultStr, value >> 18 | 0xF0);
                        GlobalObject.AppendInHex(resultStr, value >> 12 & 0x3F | 0x80);
                        GlobalObject.AppendInHex(resultStr, value >> 6 & 0x3F | 0x80);
                        GlobalObject.AppendInHex(resultStr, value & 0x3F | 0x80);
                    }
                }
            }
            return(resultStr.ToString());
        }
Ejemplo n.º 3
0
        private static bool InURISet(char ch, URISetType flags)
        {
            if ((flags & URISetType.Unescaped) == URISetType.None)
            {
                goto Label_0066;
            }
            if ((((ch >= '0') && (ch <= '9')) || ((ch >= 'A') && (ch <= 'Z'))) || ((ch >= 'a') && (ch <= 'z')))
            {
                return(true);
            }
            if (ch <= '.')
            {
                switch (ch)
                {
                case '\'':
                case '(':
                case ')':
                case '*':
                case '-':
                case '.':
                case '!':
                    return(true);
                }
                goto Label_0066;
            }
            if ((ch != '_') && (ch != '~'))
            {
                goto Label_0066;
            }
            return(true);

Label_0066:
            if ((flags & URISetType.Reserved) != URISetType.None)
            {
                switch (ch)
                {
                case '#':
                case '$':
                case '&':
                case '+':
                case ',':
                case '/':
                case ':':
                case ';':
                case '=':
                case '?':
                case '@':
                    return(true);
                }
            }
            return(false);
        }
Ejemplo n.º 4
0
 private static string Encode(string uri, URISetType flags)
 {
     System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
     for (int i = 0; i < uri.Length; i++)
     {
         char c = uri[i];
         if (InURISet(c, flags))
         {
             stringBuilder.Append(c);
             continue;
         }
         int num = c;
         if (num >= 0 && num <= 127)
         {
             AppendInHex(stringBuilder, num);
             continue;
         }
         if (num >= 128 && num <= 2047)
         {
             AppendInHex(stringBuilder, (num >> 6) | 0xC0);
             AppendInHex(stringBuilder, (num & 0x3F) | 0x80);
             continue;
         }
         if (num < 55296 || num > 57343)
         {
             AppendInHex(stringBuilder, (num >> 12) | 0xE0);
             AppendInHex(stringBuilder, ((num >> 6) & 0x3F) | 0x80);
             AppendInHex(stringBuilder, (num & 0x3F) | 0x80);
             continue;
         }
         if (num >= 56320 && num <= 57343)
         {
             throw new JavaScriptException(JavaScriptError.URIEncodeError);
         }
         if (++i >= uri.Length)
         {
             throw new JavaScriptException(JavaScriptError.URIEncodeError);
         }
         int num2 = uri[i];
         if (num2 < 56320 || num2 > 57343)
         {
             throw new JavaScriptException(JavaScriptError.URIEncodeError);
         }
         num = (num - 55296 << 10) + num2 + 9216;
         AppendInHex(stringBuilder, (num >> 18) | 0xF0);
         AppendInHex(stringBuilder, ((num >> 12) & 0x3F) | 0x80);
         AppendInHex(stringBuilder, ((num >> 6) & 0x3F) | 0x80);
         AppendInHex(stringBuilder, (num & 0x3F) | 0x80);
     }
     return(stringBuilder.ToString());
 }
Ejemplo n.º 5
0
 private static bool InURISet(char ch, URISetType flags)
 {
     if ((flags & URISetType.Unescaped) != URISetType.None)
     {
         if (ch >= '0' && ch <= '9' ||
             ch >= 'A' && ch <= 'Z' ||
             ch >= 'a' && ch <= 'z')
         {
             return(true);
         }
         switch (ch)
         {
         case '-':
         case '_':
         case '.':
         case '!':
         case '~':
         case '*':
         case '\'':
         case '(':
         case ')':
             return(true);
         }
     }
     if ((flags & URISetType.Reserved) != URISetType.None)
     {
         switch (ch)
         {
         case ';':
         case '/':
         case '?':
         case ':':
         case '@':
         case '&':
         case '=':
         case '+':
         case '$':
         case ',':
         case '#':
             return(true);
         }
     }
     return(false);
 }
        private static string Decode(object encodedURI, URISetType flags)
        {
            string        str     = Microsoft.JScript.Convert.ToString(encodedURI);
            StringBuilder builder = new StringBuilder();

            for (int i = 0; i < str.Length; i++)
            {
                char ch = str[i];
                if (ch != '%')
                {
                    builder.Append(ch);
                }
                else
                {
                    char ch2;
                    int  startIndex = i;
                    if ((i + 2) >= str.Length)
                    {
                        throw new JScriptException(JSError.URIDecodeError);
                    }
                    byte num3 = HexValue(str[i + 1], str[i + 2]);
                    i += 2;
                    if ((num3 & 0x80) == 0)
                    {
                        ch2 = (char)num3;
                    }
                    else
                    {
                        int num4 = 1;
                        while (((num3 << num4) & 0x80) != 0)
                        {
                            num4++;
                        }
                        if (((num4 == 1) || (num4 > 4)) || ((i + ((num4 - 1) * 3)) >= str.Length))
                        {
                            throw new JScriptException(JSError.URIDecodeError);
                        }
                        int num5 = num3 & (((int)0xff) >> (num4 + 1));
                        while (num4 > 1)
                        {
                            if (str[i + 1] != '%')
                            {
                                throw new JScriptException(JSError.URIDecodeError);
                            }
                            num3 = HexValue(str[i + 2], str[i + 3]);
                            i   += 3;
                            if ((num3 & 0xc0) != 0x80)
                            {
                                throw new JScriptException(JSError.URIDecodeError);
                            }
                            num5 = (num5 << 6) | (num3 & 0x3f);
                            num4--;
                        }
                        if ((num5 >= 0xd800) && (num5 < 0xe000))
                        {
                            throw new JScriptException(JSError.URIDecodeError);
                        }
                        if (num5 < 0x10000)
                        {
                            ch2 = (char)num5;
                        }
                        else
                        {
                            if (num5 > 0x10ffff)
                            {
                                throw new JScriptException(JSError.URIDecodeError);
                            }
                            builder.Append((char)((((num5 - 0x10000) >> 10) & 0x3ff) + 0xd800));
                            builder.Append((char)(((num5 - 0x10000) & 0x3ff) + 0xdc00));
                            goto Label_01D4;
                        }
                    }
                    if (InURISet(ch2, flags))
                    {
                        builder.Append(str, startIndex, (i - startIndex) + 1);
                    }
                    else
                    {
                        builder.Append(ch2);
                    }
                    Label_01D4 :;
                }
            }
            return(builder.ToString());
        }
Ejemplo n.º 7
0
        private static String Decode(Object encodedURI, URISetType flags)
        {
            String        encodedURIStr = Convert.ToString(encodedURI);
            StringBuilder resultStr     = new StringBuilder();

            for (int i = 0; i < encodedURIStr.Length; i++)
            {
                char ch = encodedURIStr[i];
                if (ch != '%')
                {
                    resultStr.Append(ch);
                }
                else
                {
                    int start = i;
                    if (i + 2 >= encodedURIStr.Length)
                    {
                        throw new JScriptException(JSError.URIDecodeError);
                    }
                    byte b = HexValue(encodedURIStr[i + 1], encodedURIStr[i + 2]);
                    i += 2;

                    char ch1;
                    if ((b & 0x80) == 0)
                    {
                        ch1 = (char)b;
                    }
                    else
                    {
                        int n;
                        for (n = 1; ((b << n) & 0x80) != 0; n++)
                        {
                            ;
                        }
                        if (n == 1 || n > 4 || i + (n - 1) * 3 >= encodedURIStr.Length)
                        {
                            throw new JScriptException(JSError.URIDecodeError);
                        }
                        int value = (int)b & 0xFF >> (n + 1);
                        for (; n > 1; n--)
                        {
                            if (encodedURIStr[i + 1] != '%')
                            {
                                throw new JScriptException(JSError.URIDecodeError);
                            }
                            b  = HexValue(encodedURIStr[i + 2], encodedURIStr[i + 3]);
                            i += 3;
                            // The two leading bits should be 10 for a valid UTF-8 encoding.
                            if ((b & 0xC0) != 0x80)
                            {
                                throw new JScriptException(JSError.URIDecodeError);
                            }
                            value = value << 6 | (int)(b & 0x3F);
                        }
                        if (value >= 0xD800 && value < 0xE000)
                        {
                            throw new JScriptException(JSError.URIDecodeError);
                        }
                        if (value < 0x10000)
                        {
                            ch1 = (char)value;
                        }
                        else
                        {
                            if (value > 0x10FFFF)
                            {
                                throw new JScriptException(JSError.URIDecodeError);
                            }
                            resultStr.Append((char)((value - 0x10000 >> 10 & 0x3FF) + 0xD800));
                            resultStr.Append((char)((value - 0x10000 & 0x3FF) + 0xDC00));
                            continue;
                        }
                    }

                    if (GlobalObject.InURISet(ch1, flags))
                    {
                        resultStr.Append(encodedURIStr, start, i - start + 1);
                    }
                    else
                    {
                        resultStr.Append(ch1);
                    }
                }
            }

            return(resultStr.ToString());
        }
Ejemplo n.º 8
0
 private static bool InURISet(char ch, URISetType flags){
   if ((flags & URISetType.Unescaped) != URISetType.None){
     if (ch >= '0' && ch <= '9'
      || ch >= 'A' && ch <= 'Z'
      || ch >= 'a' && ch <= 'z')
       return true;
     switch (ch){
       case '-':  case '_': case '.':
       case '!':  case '~': case '*':
       case '\'': case '(': case ')':
         return true;
     }
   }
   if ((flags & URISetType.Reserved) != URISetType.None){
     switch (ch){
       case ';': case '/': case '?':
       case ':': case '@': case '&':
       case '=': case '+': case '$':
       case ',': case '#':
         return true;
     }
   }
   return false;
 }
Ejemplo n.º 9
0
 private static String Encode(Object uri, URISetType flags){
   String uriStr = Convert.ToString(uri);
   StringBuilder resultStr = new StringBuilder();
   for (int i = 0; i < uriStr.Length; i++){
     char ch = uriStr[i];
     if (GlobalObject.InURISet(ch, flags))
       resultStr.Append(ch);
     else{
       int value = (int)ch;
       if (value >= 0 && value <= 0x7F)
         GlobalObject.AppendInHex(resultStr, value);
       else if (value >= 0x0080 && value <= 0x07FF){
         GlobalObject.AppendInHex(resultStr, value >>  6        | 0xC0);
         GlobalObject.AppendInHex(resultStr, value       & 0x3F | 0x80);
       }else if (value < 0xD800 || value > 0xDFFF){
         GlobalObject.AppendInHex(resultStr, value >> 12        | 0xE0);
         GlobalObject.AppendInHex(resultStr, value >>  6 & 0x3F | 0x80);
         GlobalObject.AppendInHex(resultStr, value       & 0x3F | 0x80);
       }else{
         if (value >= 0xDC00 && value <= 0xDFFF)
           throw new JScriptException(JSError.URIEncodeError);
         if (++i >= uriStr.Length)
           throw new JScriptException(JSError.URIEncodeError);
         int value1 = (int)uriStr[i];
         if (value1 < 0xDC00 || value1 > 0xDFFF)
           throw new JScriptException(JSError.URIEncodeError);
         value = (value - 0xD800 << 10) + value1 + 0x2400;
         GlobalObject.AppendInHex(resultStr, value >> 18        | 0xF0);
         GlobalObject.AppendInHex(resultStr, value >> 12 & 0x3F | 0x80);
         GlobalObject.AppendInHex(resultStr, value >>  6 & 0x3F | 0x80);
         GlobalObject.AppendInHex(resultStr, value       & 0x3F | 0x80);
       }
     }
   }
   return resultStr.ToString();
 }
Ejemplo n.º 10
0
      private static String Decode(Object encodedURI, URISetType flags){
        String encodedURIStr = Convert.ToString(encodedURI);
        StringBuilder resultStr = new StringBuilder();
        for (int i = 0; i < encodedURIStr.Length; i++){
          char ch = encodedURIStr[i];
          if (ch != '%')
            resultStr.Append(ch);
          else{
            int start = i;
            if (i+2 >= encodedURIStr.Length)
              throw new JScriptException(JSError.URIDecodeError);
            byte b = HexValue(encodedURIStr[i+1], encodedURIStr[i+2]);
            i += 2;

            char ch1;
            if ((b & 0x80) == 0)
              ch1 = (char)b;
            else{
              int n;
              for (n = 1; ((b << n) & 0x80) != 0; n++) ;
              if (n == 1 || n > 4 || i + (n-1) * 3 >= encodedURIStr.Length)
                throw new JScriptException(JSError.URIDecodeError);
              int value = (int)b & 0xFF >> (n+1);
              for (; n > 1; n--){
                if (encodedURIStr[i+1] != '%')
                  throw new JScriptException(JSError.URIDecodeError);
                b = HexValue(encodedURIStr[i+2], encodedURIStr[i+3]);
                i += 3;
                // The two leading bits should be 10 for a valid UTF-8 encoding.
                if ((b & 0xC0) != 0x80)
                  throw new JScriptException(JSError.URIDecodeError);
                value = value << 6 | (int)(b & 0x3F);
              }
              if (value >= 0xD800 && value < 0xE000)
                throw new JScriptException(JSError.URIDecodeError);
              if (value < 0x10000)
                ch1 = (char)value;
              else{
                if (value > 0x10FFFF)
                  throw new JScriptException(JSError.URIDecodeError);
                resultStr.Append((char)((value - 0x10000 >> 10 & 0x3FF) + 0xD800));
                resultStr.Append((char)((value - 0x10000       & 0x3FF) + 0xDC00));
                continue;
              }
            }

            if (GlobalObject.InURISet(ch1, flags))
              resultStr.Append(encodedURIStr, start, i-start+1);
            else
              resultStr.Append(ch1);
          }
        }

        return resultStr.ToString();
      }
Ejemplo n.º 11
0
 private static string Decode(string encodedURI, URISetType flags)
 {
     System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
     for (int i = 0; i < encodedURI.Length; i++)
     {
         char c = encodedURI[i];
         if (c != '%')
         {
             stringBuilder.Append(c);
             continue;
         }
         int num = i;
         if (i + 2 >= encodedURI.Length)
         {
             throw new JavaScriptException(JavaScriptError.URIDecodeError);
         }
         byte b = HexValue(encodedURI[i + 1], encodedURI[i + 2]);
         i += 2;
         char c2;
         if ((b & 0x80) == 0)
         {
             c2 = (char)b;
         }
         else
         {
             int j;
             for (j = 1; ((b << j) & 0x80) != 0; j++)
             {
             }
             if (j == 1 || j > 4 || i + (j - 1) * 3 >= encodedURI.Length)
             {
                 throw new JavaScriptException(JavaScriptError.URIDecodeError);
             }
             int num2 = b & (255 >> j + 1);
             while (j > 1)
             {
                 if (encodedURI[i + 1] != '%')
                 {
                     throw new JavaScriptException(JavaScriptError.URIDecodeError);
                 }
                 b  = HexValue(encodedURI[i + 2], encodedURI[i + 3]);
                 i += 3;
                 if ((b & 0xC0) != 128)
                 {
                     throw new JavaScriptException(JavaScriptError.URIDecodeError);
                 }
                 num2 = ((num2 << 6) | (b & 0x3F));
                 j--;
             }
             if (num2 >= 55296 && num2 < 57344)
             {
                 throw new JavaScriptException(JavaScriptError.URIDecodeError);
             }
             if (num2 >= 65536)
             {
                 if (num2 > 1114111)
                 {
                     throw new JavaScriptException(JavaScriptError.URIDecodeError);
                 }
                 stringBuilder.Append((char)(((num2 - 65536 >> 10) & 0x3FF) + 55296));
                 stringBuilder.Append((char)(((num2 - 65536) & 0x3FF) + 56320));
                 continue;
             }
             c2 = (char)num2;
         }
         if (InURISet(c2, flags))
         {
             stringBuilder.Append(encodedURI, num, i - num + 1);
         }
         else
         {
             stringBuilder.Append(c2);
         }
     }
     return(stringBuilder.ToString());
 }
 private static string Decode(object encodedURI, URISetType flags)
 {
     string str = Microsoft.JScript.Convert.ToString(encodedURI);
     StringBuilder builder = new StringBuilder();
     for (int i = 0; i < str.Length; i++)
     {
         char ch = str[i];
         if (ch != '%')
         {
             builder.Append(ch);
         }
         else
         {
             char ch2;
             int startIndex = i;
             if ((i + 2) >= str.Length)
             {
                 throw new JScriptException(JSError.URIDecodeError);
             }
             byte num3 = HexValue(str[i + 1], str[i + 2]);
             i += 2;
             if ((num3 & 0x80) == 0)
             {
                 ch2 = (char) num3;
             }
             else
             {
                 int num4 = 1;
                 while (((num3 << num4) & 0x80) != 0)
                 {
                     num4++;
                 }
                 if (((num4 == 1) || (num4 > 4)) || ((i + ((num4 - 1) * 3)) >= str.Length))
                 {
                     throw new JScriptException(JSError.URIDecodeError);
                 }
                 int num5 = num3 & (((int) 0xff) >> (num4 + 1));
                 while (num4 > 1)
                 {
                     if (str[i + 1] != '%')
                     {
                         throw new JScriptException(JSError.URIDecodeError);
                     }
                     num3 = HexValue(str[i + 2], str[i + 3]);
                     i += 3;
                     if ((num3 & 0xc0) != 0x80)
                     {
                         throw new JScriptException(JSError.URIDecodeError);
                     }
                     num5 = (num5 << 6) | (num3 & 0x3f);
                     num4--;
                 }
                 if ((num5 >= 0xd800) && (num5 < 0xe000))
                 {
                     throw new JScriptException(JSError.URIDecodeError);
                 }
                 if (num5 < 0x10000)
                 {
                     ch2 = (char) num5;
                 }
                 else
                 {
                     if (num5 > 0x10ffff)
                     {
                         throw new JScriptException(JSError.URIDecodeError);
                     }
                     builder.Append((char) ((((num5 - 0x10000) >> 10) & 0x3ff) + 0xd800));
                     builder.Append((char) (((num5 - 0x10000) & 0x3ff) + 0xdc00));
                     goto Label_01D4;
                 }
             }
             if (InURISet(ch2, flags))
             {
                 builder.Append(str, startIndex, (i - startIndex) + 1);
             }
             else
             {
                 builder.Append(ch2);
             }
         Label_01D4:;
         }
     }
     return builder.ToString();
 }
 private static string Encode(object uri, URISetType flags)
 {
     string str = Microsoft.JScript.Convert.ToString(uri);
     StringBuilder bs = new StringBuilder();
     for (int i = 0; i < str.Length; i++)
     {
         char ch = str[i];
         if (InURISet(ch, flags))
         {
             bs.Append(ch);
         }
         else
         {
             int num2 = ch;
             if ((num2 >= 0) && (num2 <= 0x7f))
             {
                 AppendInHex(bs, num2);
             }
             else if ((num2 >= 0x80) && (num2 <= 0x7ff))
             {
                 AppendInHex(bs, (num2 >> 6) | 0xc0);
                 AppendInHex(bs, (num2 & 0x3f) | 0x80);
             }
             else if ((num2 < 0xd800) || (num2 > 0xdfff))
             {
                 AppendInHex(bs, (num2 >> 12) | 0xe0);
                 AppendInHex(bs, ((num2 >> 6) & 0x3f) | 0x80);
                 AppendInHex(bs, (num2 & 0x3f) | 0x80);
             }
             else
             {
                 if ((num2 >= 0xdc00) && (num2 <= 0xdfff))
                 {
                     throw new JScriptException(JSError.URIEncodeError);
                 }
                 if (++i >= str.Length)
                 {
                     throw new JScriptException(JSError.URIEncodeError);
                 }
                 int num3 = str[i];
                 if ((num3 < 0xdc00) || (num3 > 0xdfff))
                 {
                     throw new JScriptException(JSError.URIEncodeError);
                 }
                 num2 = (((num2 - 0xd800) << 10) + num3) + 0x2400;
                 AppendInHex(bs, (num2 >> 0x12) | 240);
                 AppendInHex(bs, ((num2 >> 12) & 0x3f) | 0x80);
                 AppendInHex(bs, ((num2 >> 6) & 0x3f) | 0x80);
                 AppendInHex(bs, (num2 & 0x3f) | 0x80);
             }
         }
     }
     return bs.ToString();
 }