Skip to content

Commit 03fbd38

Browse files
committed
way better hex conversion
1 parent 92db7b0 commit 03fbd38

File tree

1 file changed

+9
-28
lines changed

1 file changed

+9
-28
lines changed

shared/regex/codeql/regex/nfa/NfaUtils.qll

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1327,38 +1327,19 @@ module Make<RegexTreeViewSig TreeImpl> {
13271327
private string escapeUnicodeChar(string char) {
13281328
if isPrintable(char)
13291329
then result = char
1330-
else result = "\\u" + to4digitNumber(toHex(any(int i | i.toUnicode() = char)))
1330+
else result = "\\u" + to4digitHex(any(int i | i.toUnicode() = char))
13311331
}
13321332

13331333
/**
1334-
* Gets a string representation of `number` in hexadecimal.
1335-
* Works for the first 200000 numbers, which is enough for every unicode character.
1334+
* Gets a 4-digit hex representation of `i`.
13361335
*/
1337-
private string toHex(int number) {
1338-
number = [0 .. 200000] and
1339-
if number <= 9
1340-
then result = number + ""
1341-
else
1342-
if number <= 15
1343-
then result = "abcdef".charAt(number - 10)
1344-
else result = toHex(number / 16) + toHex(number % 16)
1345-
}
1346-
1347-
/** Gets a string where 0 has been prepended to `num` until it has length 4. */
1348-
bindingset[num]
1349-
private string to4digitNumber(string num) {
1350-
if num.length() >= 4
1351-
then result = num
1352-
else
1353-
if num.length() = 3
1354-
then result = "0" + num
1355-
else
1356-
if num.length() = 2
1357-
then result = "00" + num
1358-
else
1359-
if num.length() = 1
1360-
then result = "000" + num
1361-
else result = "0000"
1336+
bindingset[i]
1337+
string to4digitHex(int i) {
1338+
result =
1339+
"0123456789abcdef".charAt(i.bitShiftRight(12).bitAnd(15)) +
1340+
"0123456789abcdef".charAt(i.bitShiftRight(8).bitAnd(15)) +
1341+
"0123456789abcdef".charAt(i.bitShiftRight(4).bitAnd(15)) +
1342+
"0123456789abcdef".charAt(i.bitAnd(15))
13621343
}
13631344

13641345
/** Holds if `char` is easily printable char, or whitespace. */

0 commit comments

Comments
 (0)