]> granicus.if.org Git - file/commitdiff
CID 337784: cast to clarify sign extension
authorChristos Zoulas <christos@zoulas.com>
Mon, 15 Apr 2019 16:48:41 +0000 (16:48 +0000)
committerChristos Zoulas <christos@zoulas.com>
Mon, 15 Apr 2019 16:48:41 +0000 (16:48 +0000)
src/encoding.c

index b8c2230d4749bef02b4c06cd0911fac8df43496b..76244f87f95b0234d2a3d79b87720dab00d621e2 100644 (file)
@@ -35,7 +35,7 @@
 #include "file.h"
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: encoding.c,v 1.19 2019/02/23 21:54:05 christos Exp $")
+FILE_RCSID("@(#)$File: encoding.c,v 1.20 2019/04/15 16:48:41 christos Exp $")
 #endif /* lint */
 
 #include "magic.h"
@@ -94,7 +94,8 @@ file_encoding(struct magic_set *ms, const struct buffer *b, unichar **ubuf,
                goto done;
        }
        mlen = (nbytes + 1) * sizeof(nbuf[0]);
-       if ((nbuf = CAST(unsigned char *, calloc(CAST(size_t, 1), mlen))) == NULL) {
+       if ((nbuf = CAST(unsigned char *,
+           calloc(CAST(size_t, 1), mlen))) == NULL) {
                file_oomem(ms, mlen);
                goto done;
        }
@@ -442,9 +443,11 @@ looks_ucs16(const unsigned char *bf, size_t nbytes, unichar *ubf,
                /* XXX fix to properly handle chars > 65536 */
 
                if (bigend)
-                       ubf[(*ulen)++] = bf[i + 1] + (bf[i] << 8);
+                       ubf[(*ulen)++] = bf[i + 1]
+                           | (CAST(unichar, bf[i]) << 8);
                else
-                       ubf[(*ulen)++] = bf[i] + (bf[i + 1] << 8);
+                       ubf[(*ulen)++] = bf[i]
+                           | (CAST(unichar, bf[i + 1]) << 8);
 
                if (ubf[*ulen - 1] == 0xfffe)
                        return 0;
@@ -479,12 +482,14 @@ looks_ucs32(const unsigned char *bf, size_t nbytes, unichar *ubf,
                /* XXX fix to properly handle chars > 65536 */
 
                if (bigend)
-                       ubf[(*ulen)++] = bf[i + 3] | (bf[i + 2] << 8)
-                           | (bf[i + 1] << 16)
+                       ubf[(*ulen)++] = CAST(unichar, bf[i + 3])
+                           | (CAST(unichar, bf[i + 2]) << 8)
+                           | (CAST(unichar, bf[i + 1]) << 16)
                            | (CAST(unichar, bf[i]) << 24);
                else
-                       ubf[(*ulen)++] = bf[i] | (bf[i + 1] << 8) 
-                           | (bf[i + 2] << 16)
+                       ubf[(*ulen)++] = CAST(unichar, bf[i + 0])
+                           | (CAST(unichar, bf[i + 1]) << 8) 
+                           | (CAST(unichar, bf[i + 2]) << 16)
                            | (CAST(unichar, bf[i + 3]) << 24);
 
                if (ubf[*ulen - 1] == 0xfffe)