[Pkg-clamav-commits] [SCM] Debian repository for ClamAV branch, debian/unstable, updated. debian/0.95+dfsg-1-6156-g094ec9b

aCaB acab at clamav.net
Sun Apr 4 01:16:09 UTC 2010


The following commit has been merged in the debian/unstable branch:
commit 510c3097dba166e891c3ef84c108410d483c327f
Author: aCaB <acab at clamav.net>
Date:   Fri Jan 22 11:50:54 2010 +0100

    bb#1778

diff --git a/ChangeLog b/ChangeLog
index 3e84066..d865865 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Fri Jan 22 11:49:07 CET 2010 (acab)
+-----------------------------------
+ * libclamav: fix shifts >= width (bb#1778)
+
 Thu Jan 21 23:01:34 CET 2010 (tk)
 ---------------------------------
  * sigtool: create digitally signed .info files
diff --git a/libclamav/disasm.c b/libclamav/disasm.c
index 57ed698..5ac062b 100644
--- a/libclamav/disasm.c
+++ b/libclamav/disasm.c
@@ -1545,8 +1545,10 @@ static const uint8_t *disasm_x86(const uint8_t *command, unsigned int len, struc
 	    GETBYTE(b);
 	    shiftme+=b<<(i*8);
 	  }
-	  shiftme<<=((8-mod)*8);
-	  s->args[reversed].arg.marg.disp=shiftme>>((8-mod)*8);
+	  if(mod) {
+	      shiftme<<=((8-mod)*8);
+	      s->args[reversed].arg.marg.disp=shiftme>>((8-mod)*8);
+	  } else s->args[reversed].arg.marg.disp=0;
 	} else {
 	  if (mod==0 && rm==6) {
 	    s->args[reversed].arg.marg.r1=REG_INVALID;
diff --git a/libclamav/others.h b/libclamav/others.h
index 3ac787c..2a66360 100644
--- a/libclamav/others.h
+++ b/libclamav/others.h
@@ -380,8 +380,10 @@ static inline void cli_writeint32(char *offset, uint32_t value)
 #endif
 
 /* used by: spin, yc (C) aCaB */
-#define CLI_ROL(a,b) a = ( a << (b % (sizeof(a)<<3) ))  |  (a >> (  (sizeof(a)<<3)  -  (b % (sizeof(a)<<3 )) ) )
-#define CLI_ROR(a,b) a = ( a >> (b % (sizeof(a)<<3) ))  |  (a << (  (sizeof(a)<<3)  -  (b % (sizeof(a)<<3 )) ) )
+#define __SHIFTBITS(a) (sizeof(a)<<3)
+#define __SHIFTMASK(a) (__SHIFTBITS(a)-1)
+#define CLI_ROL(a,b) a = ( a << (b & __SHIFTMASK(a)) ) | ( a >> ((__SHIFTBITS(a) - b) & __SHIFTMASK(a)) )
+#define CLI_ROR(a,b) a = ( a >> (b & __SHIFTMASK(a)) ) | ( a << ((__SHIFTBITS(a) - b) & __SHIFTMASK(a))
 
 /* Implementation independent sign-extended signed right shift */
 #ifdef HAVE_SAR

-- 
Debian repository for ClamAV



More information about the Pkg-clamav-commits mailing list