[Modify] Support &#xhhhh;

This commit is contained in:
sta 2018-12-31 21:32:31 +09:00
parent 759df4f755
commit 47cfdcdc93

View File

@ -185,6 +185,7 @@ namespace WebSocketSharp.Net
// 1: Right after '&' // 1: Right after '&'
// 2: Between '&' and ';' but no '#' // 2: Between '&' and ';' but no '#'
// 3: '#' found after '&' and getting numbers // 3: '#' found after '&' and getting numbers
// 4: 'x' found after "&#" and getting numbers
var state = 0; var state = 0;
var reference = new StringBuilder (); var reference = new StringBuilder ();
@ -264,12 +265,40 @@ namespace WebSocketSharp.Net
continue; continue;
} }
if (c == 'x') {
state = reference.Length == 3 ? 4 : 2;
continue;
}
if (!Char.IsDigit (c)) { if (!Char.IsDigit (c)) {
state = 2; state = 2;
continue; continue;
} }
number = number * 10 + (c - '0'); number = number * 10 + (c - '0');
continue;
}
if (state == 4) {
if (c == ';') {
if (reference.Length > 4 && number < 65536)
buff.Append ((char) number);
else
buff.Append (reference.ToString ());
reference.Length = 0;
state = 0;
continue;
}
var n = getNumber (c);
if (n == -1) {
state = 2;
continue;
}
number = (number << 4) + n;
} }
} }