]> granicus.if.org Git - file/commitdiff
use unsigned int shifts
authorChristos Zoulas <christos@zoulas.com>
Sat, 4 Feb 2017 16:46:16 +0000 (16:46 +0000)
committerChristos Zoulas <christos@zoulas.com>
Sat, 4 Feb 2017 16:46:16 +0000 (16:46 +0000)
src/apprentice.c

index ee5041b547e473120ff51c18cf5a55d056008093..5eaa570aa7f1ce4c97676d33cf61c029bde303a4 100644 (file)
@@ -32,7 +32,7 @@
 #include "file.h"
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: apprentice.c,v 1.255 2016/10/24 18:02:17 christos Exp $")
+FILE_RCSID("@(#)$File: apprentice.c,v 1.256 2016/11/07 15:36:56 christos Exp $")
 #endif /* lint */
 
 #include "magic.h"
@@ -3271,22 +3271,35 @@ file_pstring_get_length(const struct magic *m, const char *ss)
 {
        size_t len = 0;
        const unsigned char *s = (const unsigned char *)ss;
+       unsigned int s3, s2, s1, s0;
 
        switch (m->str_flags & PSTRING_LEN) {
        case PSTRING_1_LE:
                len = *s;
                break;
        case PSTRING_2_LE:
-               len = (s[1] << 8) | s[0];
+               s0 = s[0];
+               s1 = s[1];
+               len = (s1 << 8) | s0;
                break;
        case PSTRING_2_BE:
-               len = (s[0] << 8) | s[1];
+               s0 = s[0];
+               s1 = s[1];
+               len = (s0 << 8) | s1;
                break;
        case PSTRING_4_LE:
-               len = (s[3] << 24) | (s[2] << 16) | (s[1] << 8) | s[0];
+               s0 = s[0];
+               s1 = s[1];
+               s2 = s[2];
+               s3 = s[3];
+               len = (s3 << 24) | (s2 << 16) | (s1 << 8) | s0;
                break;
        case PSTRING_4_BE:
-               len = (s[0] << 24) | (s[1] << 16) | (s[2] << 8) | s[3];
+               s0 = s[0];
+               s1 = s[1];
+               s2 = s[2];
+               s3 = s[3];
+               len = (s0 << 24) | (s1 << 16) | (s2 << 8) | s3;
                break;
        default:
                abort();        /* Impossible */