[l_bsp_{q1,q2,sin}.c] Fix undefined behaviour in array access

This commit is contained in:
Thomas Köppe 2016-08-02 09:48:04 +01:00 committed by Garux
parent 39a3819765
commit 39c70072da
3 changed files with 24 additions and 9 deletions

View File

@ -227,7 +227,7 @@ Byte swaps all data in a bsp file.
*/ */
void Q1_SwapBSPFile (qboolean todisk) void Q1_SwapBSPFile (qboolean todisk)
{ {
int i, j, c; int i, j, k, c;
q1_dmodel_t *d; q1_dmodel_t *d;
q1_dmiptexlump_t *mtl; q1_dmiptexlump_t *mtl;
@ -277,8 +277,13 @@ void Q1_SwapBSPFile (qboolean todisk)
// //
for (i=0 ; i<q1_numtexinfo ; i++) for (i=0 ; i<q1_numtexinfo ; i++)
{ {
for (j=0 ; j<8 ; j++) for (j=0 ; j<2 ; j++)
q1_texinfo[i].vecs[0][j] = LittleFloat(q1_texinfo[i].vecs[0][j]); {
for (k=0; k<4; k++)
{
q1_texinfo[i].vecs[j][k] = LittleFloat (q1_texinfo[i].vecs[j][k]);
}
}
q1_texinfo[i].miptex = LittleLong(q1_texinfo[i].miptex); q1_texinfo[i].miptex = LittleLong(q1_texinfo[i].miptex);
q1_texinfo[i].flags = LittleLong(q1_texinfo[i].flags); q1_texinfo[i].flags = LittleLong(q1_texinfo[i].flags);
} }

View File

@ -642,7 +642,7 @@ Byte swaps all data in a bsp file.
*/ */
void Q2_SwapBSPFile (qboolean todisk) void Q2_SwapBSPFile (qboolean todisk)
{ {
int i, j; int i, j, k;
dmodel_t *d; dmodel_t *d;
@ -688,8 +688,13 @@ void Q2_SwapBSPFile (qboolean todisk)
// //
for (i=0 ; i<numtexinfo ; i++) for (i=0 ; i<numtexinfo ; i++)
{ {
for (j=0 ; j<8 ; j++) for (j=0 ; j<2 ; j++)
texinfo[i].vecs[0][j] = LittleFloat (texinfo[i].vecs[0][j]); {
for (k=0; k<4; k++)
{
texinfo[i].vecs[j][k] = LittleFloat (texinfo[i].vecs[j][k]);
}
}
texinfo[i].flags = LittleLong (texinfo[i].flags); texinfo[i].flags = LittleLong (texinfo[i].flags);
texinfo[i].value = LittleLong (texinfo[i].value); texinfo[i].value = LittleLong (texinfo[i].value);
texinfo[i].nexttexinfo = LittleLong (texinfo[i].nexttexinfo); texinfo[i].nexttexinfo = LittleLong (texinfo[i].nexttexinfo);

View File

@ -542,7 +542,7 @@ Byte swaps all data in a bsp file.
*/ */
void Sin_SwapBSPFile (qboolean todisk) void Sin_SwapBSPFile (qboolean todisk)
{ {
int i, j; int i, j, k;
sin_dmodel_t *d; sin_dmodel_t *d;
@ -588,8 +588,13 @@ void Sin_SwapBSPFile (qboolean todisk)
// //
for (i = 0; i < sin_numtexinfo; i++) for (i = 0; i < sin_numtexinfo; i++)
{ {
for (j=0 ; j<8 ; j++) for (j=0 ; j<2 ; j++)
sin_texinfo[i].vecs[0][j] = LittleFloat (sin_texinfo[i].vecs[0][j]); {
for (k=0; k<4; k++)
{
sin_texinfo[i].vecs[j][k] = LittleFloat (sin_texinfo[i].vecs[j][k]);
}
}
#ifdef SIN #ifdef SIN
sin_texinfo[i].trans_mag = LittleFloat( sin_texinfo[i].trans_mag ); sin_texinfo[i].trans_mag = LittleFloat( sin_texinfo[i].trans_mag );
sin_texinfo[i].trans_angle = LittleLong( sin_texinfo[i].trans_angle ); sin_texinfo[i].trans_angle = LittleLong( sin_texinfo[i].trans_angle );