extractbits robustness
This commit is contained in:
parent
0078e5a338
commit
d17a51bc59
|
@ -349,14 +349,17 @@ uint ExtractBits(uvec4 payload, int offset, int bits) {
|
|||
if (bits <= 0) {
|
||||
return 0;
|
||||
}
|
||||
int last_offset = offset + bits - 1;
|
||||
int shifted_offset = offset >> 5;
|
||||
if (bits > 32) {
|
||||
return 0;
|
||||
}
|
||||
const int last_offset = offset + bits - 1;
|
||||
const int shifted_offset = offset >> 5;
|
||||
if ((last_offset >> 5) == shifted_offset) {
|
||||
return bitfieldExtract(payload[shifted_offset], offset & 31, bits);
|
||||
}
|
||||
int first_bits = 32 - (offset & 31);
|
||||
int result_first = int(bitfieldExtract(payload[shifted_offset], offset & 31, first_bits));
|
||||
int result_second = int(bitfieldExtract(payload[shifted_offset + 1], 0, bits - first_bits));
|
||||
const int first_bits = 32 - (offset & 31);
|
||||
const int result_first = int(bitfieldExtract(payload[shifted_offset], offset & 31, first_bits));
|
||||
const int result_second = int(bitfieldExtract(payload[shifted_offset + 1], 0, bits - first_bits));
|
||||
return result_first | (result_second << first_bits);
|
||||
}
|
||||
|
||||
|
|
Reference in New Issue