[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 07/11] xbzrle.c: Avoid undefined behaviour with signe
From: |
Michael Tokarev |
Subject: |
[Qemu-devel] [PULL 07/11] xbzrle.c: Avoid undefined behaviour with signed arithmetic |
Date: |
Tue, 8 Apr 2014 11:04:07 +0400 |
From: Peter Maydell <address@hidden>
Use unsigned types for doing bitwise arithmetic in the xzbrle
calculations, to avoid undefined behaviour:
xbzrle.c:99:49: runtime error: left shift of 72340172838076673
by 7 places cannot be represented in type 'long'
Signed-off-by: Peter Maydell <address@hidden>
Signed-off-by: Michael Tokarev <address@hidden>
---
xbzrle.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/xbzrle.c b/xbzrle.c
index fbcb35d..8e220bf 100644
--- a/xbzrle.c
+++ b/xbzrle.c
@@ -28,7 +28,7 @@ int xbzrle_encode_buffer(uint8_t *old_buf, uint8_t *new_buf,
int slen,
{
uint32_t zrun_len = 0, nzrun_len = 0;
int d = 0, i = 0;
- long res, xor;
+ long res;
uint8_t *nzrun_start = NULL;
g_assert(!(((uintptr_t)old_buf | (uintptr_t)new_buf | slen) %
@@ -93,9 +93,11 @@ int xbzrle_encode_buffer(uint8_t *old_buf, uint8_t *new_buf,
int slen,
/* word at a time for speed, use of 32-bit long okay */
if (!res) {
/* truncation to 32-bit long okay */
- long mask = (long)0x0101010101010101ULL;
+ unsigned long mask = (unsigned long)0x0101010101010101ULL;
while (i < slen) {
- xor = *(long *)(old_buf + i) ^ *(long *)(new_buf + i);
+ unsigned long xor;
+ xor = *(unsigned long *)(old_buf + i)
+ ^ *(unsigned long *)(new_buf + i);
if ((xor - mask) & ~xor & (mask << 7)) {
/* found the end of an nzrun within the current long */
while (old_buf[i] != new_buf[i]) {
--
1.7.10.4
- [Qemu-devel] [PULL for-2.0 00/11] Trivial patches for 2014-04-08, Michael Tokarev, 2014/04/08
- [Qemu-devel] [PULL 05/11] hw/ide/ahci.c: Avoid shift left into sign bit, Michael Tokarev, 2014/04/08
- [Qemu-devel] [PULL 04/11] net: Report error when device / hub combo is not found., Michael Tokarev, 2014/04/08
- [Qemu-devel] [PULL 02/11] qga: trivial fix for unclear documentation of guest-set-time, Michael Tokarev, 2014/04/08
- [Qemu-devel] [PULL 01/11] vl: Report accelerator not supported for target more nicely, Michael Tokarev, 2014/04/08
- [Qemu-devel] [PULL 07/11] xbzrle.c: Avoid undefined behaviour with signed arithmetic,
Michael Tokarev <=
- [Qemu-devel] [PULL 06/11] int128.h: Avoid undefined behaviours involving signed arithmetic, Michael Tokarev, 2014/04/08
- [Qemu-devel] [PULL 03/11] configure: Fix indentation of help for --enable/disable-debug-info, Michael Tokarev, 2014/04/08
- [Qemu-devel] [PULL 09/11] configure: Remove redundant message for -Werror, Michael Tokarev, 2014/04/08
- [Qemu-devel] [PULL 11/11] Fix grammar in comment, Michael Tokarev, 2014/04/08
- [Qemu-devel] [PULL 08/11] scripts: add sample model file for Coverity Scan, Michael Tokarev, 2014/04/08
- [Qemu-devel] [PULL 10/11] doc: grammify "allows to", Michael Tokarev, 2014/04/08
- Re: [Qemu-devel] [PULL for-2.0 00/11] Trivial patches for 2014-04-08, Peter Maydell, 2014/04/08