private static string UrlDecodeInternal(byte[] bytes, int offset, int count, Encoding encoding) { if (!XmlaHttpUtility.ValidateUrlEncodingParameters(bytes, offset, count)) { return(null); } XmlaHttpUtility.UrlDecoder urlDecoder = new XmlaHttpUtility.UrlDecoder(count, encoding); int i = 0; while (i < count) { int num = offset + i; byte b = bytes[num]; if (b == 43) { b = 32; goto IL_E6; } if (b != 37 || i >= count - 2) { goto IL_E6; } if (bytes[num + 1] == 117 && i < count - 5) { int num2 = XmlaHttpUtility.HexToInt((char)bytes[num + 2]); int num3 = XmlaHttpUtility.HexToInt((char)bytes[num + 3]); int num4 = XmlaHttpUtility.HexToInt((char)bytes[num + 4]); int num5 = XmlaHttpUtility.HexToInt((char)bytes[num + 5]); if (num2 < 0 || num3 < 0 || num4 < 0 || num5 < 0) { goto IL_E6; } char ch = (char)(num2 << 12 | num3 << 8 | num4 << 4 | num5); i += 5; urlDecoder.AddChar(ch); } else { int num6 = XmlaHttpUtility.HexToInt((char)bytes[num + 1]); int num7 = XmlaHttpUtility.HexToInt((char)bytes[num + 2]); if (num6 >= 0 && num7 >= 0) { b = (byte)(num6 << 4 | num7); i += 2; goto IL_E6; } goto IL_E6; } IL_ED: i++; continue; IL_E6: urlDecoder.AddByte(b); goto IL_ED; } return(urlDecoder.GetString()); }
private static byte[] UrlDecodeInternal(byte[] bytes, int offset, int count) { if (!XmlaHttpUtility.ValidateUrlEncodingParameters(bytes, offset, count)) { return(null); } int num = 0; byte[] array = new byte[count]; for (int i = 0; i < count; i++) { int num2 = offset + i; byte b = bytes[num2]; if (b == 43) { b = 32; } else if (b == 37 && i < count - 2) { int num3 = XmlaHttpUtility.HexToInt((char)bytes[num2 + 1]); int num4 = XmlaHttpUtility.HexToInt((char)bytes[num2 + 2]); if (num3 >= 0 && num4 >= 0) { b = (byte)(num3 << 4 | num4); i += 2; } } array[num++] = b; } if (num < array.Length) { byte[] array2 = new byte[num]; Array.Copy(array, array2, num); array = array2; } return(array); }
private static string UrlDecodeInternal(string value, Encoding encoding) { if (value == null) { return(null); } int length = value.Length; XmlaHttpUtility.UrlDecoder urlDecoder = new XmlaHttpUtility.UrlDecoder(length, encoding); int i = 0; while (i < length) { char c = value[i]; if (c == '+') { c = ' '; goto IL_10B; } if (c != '%' || i >= length - 2) { goto IL_10B; } if (value[i + 1] == 'u' && i < length - 5) { int num = XmlaHttpUtility.HexToInt(value[i + 2]); int num2 = XmlaHttpUtility.HexToInt(value[i + 3]); int num3 = XmlaHttpUtility.HexToInt(value[i + 4]); int num4 = XmlaHttpUtility.HexToInt(value[i + 5]); if (num < 0 || num2 < 0 || num3 < 0 || num4 < 0) { goto IL_10B; } c = (char)(num << 12 | num2 << 8 | num3 << 4 | num4); i += 5; urlDecoder.AddChar(c); } else { int num5 = XmlaHttpUtility.HexToInt(value[i + 1]); int num6 = XmlaHttpUtility.HexToInt(value[i + 2]); if (num5 < 0 || num6 < 0) { goto IL_10B; } byte b = (byte)(num5 << 4 | num6); i += 2; urlDecoder.AddByte(b); } IL_125: i++; continue; IL_10B: if ((c & 'タ') == '\0') { urlDecoder.AddByte((byte)c); goto IL_125; } urlDecoder.AddChar(c); goto IL_125; } return(urlDecoder.GetString()); }