]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
Fix some UB
authorcancername <93018402+sus-impost0r@users.noreply.github.com>
Mon, 31 Jul 2023 19:37:15 +0000 (21:37 +0200)
committercancername <93018402+sus-impost0r@users.noreply.github.com>
Mon, 31 Jul 2023 19:37:15 +0000 (21:37 +0200)
caused by shifting such that the value becomes unrepresentable and
overflow respectively

com_msg.c
r_shadow.c

index f2110d17f05fefcafb6a9d5901c86d7e9d23fe3f..1da366af24ac424708303469fc599f4421899a2e 100644 (file)
--- a/com_msg.c
+++ b/com_msg.c
@@ -39,13 +39,13 @@ float BuffBigFloat (const unsigned char *buffer)
                unsigned int i;
        }
        u;
-       u.i = (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3];
+       u.i = ((unsigned)buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3];
        return u.f;
 }
 
 int BuffBigLong (const unsigned char *buffer)
 {
-       return (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3];
+       return ((unsigned)buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3];
 }
 
 short BuffBigShort (const unsigned char *buffer)
@@ -61,13 +61,13 @@ float BuffLittleFloat (const unsigned char *buffer)
                unsigned int i;
        }
        u;
-       u.i = (buffer[3] << 24) | (buffer[2] << 16) | (buffer[1] << 8) | buffer[0];
+       u.i = ((unsigned)buffer[3] << 24) | (buffer[2] << 16) | (buffer[1] << 8) | buffer[0];
        return u.f;
 }
 
 int BuffLittleLong (const unsigned char *buffer)
 {
-       return (buffer[3] << 24) | (buffer[2] << 16) | (buffer[1] << 8) | buffer[0];
+       return ((unsigned)buffer[3] << 24) | (buffer[2] << 16) | (buffer[1] << 8) | buffer[0];
 }
 
 short BuffLittleShort (const unsigned char *buffer)
index 7363602ac2839a1c6d7e27c70d993d1f65233748..3f77792d7b111a8171c8cb14c629b4387c12946f 100644 (file)
@@ -1226,7 +1226,7 @@ static unsigned int R_Shadow_MakeTextures_SamplePoint(float x, float y, float z)
        float dist = sqrt(x*x+y*y+z*z);
        float intensity = dist < 1 ? ((1.0f - dist) * r_shadow_lightattenuationlinearscale.value / (r_shadow_lightattenuationdividebias.value + dist*dist)) : 0;
        // note this code could suffer byte order issues except that it is multiplying by an integer that reads the same both ways
-       return (unsigned char)bound(0, intensity * 256.0f, 255) * 0x01010101;
+       return ((unsigned int)bound(0, intensity * 256.0f, 255)) * 0x01010101U;
 }
 
 static void R_Shadow_MakeTextures(void)