extractbits robustness
This commit is contained in:
		| @@ -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
	
	Block a user
	 Ameer J
					Ameer J