SVF: fix checking bit pattern against length
authorMichael Roth <mroth@nessie.de>
Thu, 29 Oct 2009 13:24:28 +0000 (14:24 +0100)
committerDavid Brownell <dbrownell@users.sourceforge.net>
Thu, 29 Oct 2009 22:39:03 +0000 (15:39 -0700)
The code works like follow (N = bit_len):

N -1 %4 2<< -1 ~ (binary)
--------------------------------------------------
1 0 0 2 1 1111 1110
2 1 1 4 3 1111 1100
3 2 2 8 7 1111 1000
4 3 3 16 15 1111 0000
5 4 0 2 1 1111 1110
6 5 1 4 3 1111 1100
7 6 2 8 7 1111 1000
8 7 3 16 15 1111 0000
... ... ... ... ... ...

Addresses a bug reported by FangfangLi <ffli@syntest.com.cn>.

[dbrownell@users.sourceforge.net: fix spelling bug too]

Signed-off-by: Michael Roth <mroth@nessie.de>
Cc: FangfangLi <ffli@syntest.com.cn>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
src/svf/svf.c

index 276a374..9c597bf 100644 (file)
@@ -685,9 +685,9 @@ static int svf_copy_hexstring_to_binary(char *str, uint8_t **bin, int orig_bit_l
                str_len--;
 
        // check valid
-       if (str_len > 0 || (ch & ~((1 << (4 - (bit_len % 4))) - 1)) != 0)
+       if (str_len > 0 || (ch & ~((2 << ((bit_len - 1) % 4)) - 1)) != 0)
        {
-               LOG_ERROR("value execede length");
+               LOG_ERROR("value execeeds length");
                return ERROR_FAIL;
        }