diff options
| author | 2019-03-04 17:03:50 +0000 | |
|---|---|---|
| committer | 2019-03-04 17:03:50 +0000 | |
| commit | ee51791f917dff3c15cc13c0fad1e10d791274bf (patch) | |
| tree | 135579d9230076119fe07a3420398175d377b18b | |
| parent | 7a1058410a5515656ee70ec94eb5a89ccaf44882 (diff) | |
| download | cetris-ee51791f917dff3c15cc13c0fad1e10d791274bf.tar.gz cetris-ee51791f917dff3c15cc13c0fad1e10d791274bf.tar.bz2 cetris-ee51791f917dff3c15cc13c0fad1e10d791274bf.zip | |
fix undefined behaviour due to uninitialized rotation state
| -rw-r--r-- | cetris.c | 12 |
1 files changed, 8 insertions, 4 deletions
@@ -202,14 +202,17 @@ void rotate_matrix(struct cetris_game* g, int clockwise) { case TWO:
wall_kick = (next == RRIGHT) ? 3 : 4;
break;
+ default: // check for UB causing invalid rotations
+ assert(false);
}
int set_current = 0;
+ vec2 kick;
for (int i = 0; i < 5; i++) {
- vec2 kick = (vec2){0, 0};
- if (i > 0) {
- if (g->current.t == I) kick = srs_wall_kicks_i[wall_kick][i - 1];
- else kick = srs_wall_kicks[wall_kick][i - 1];
+ if (g->current.t == I) {
+ kick = srs_wall_kicks_i[wall_kick][i];
+ } else {
+ kick = srs_wall_kicks[wall_kick][i];
}
g->current.pos.x += kick.x;
g->current.pos.y += kick.y;
@@ -328,6 +331,7 @@ void init_piece_queue(struct cetris_game* g) { case 6: g->piece_queue[i].t = T; break;
}
memcpy(g->piece_queue[i].mat, default_matrices[i], sizeof(piece_matrix));
+ g->piece_queue[i].r = INIT;
g->piece_queue[i].pos = (vec2){5, 0};
}
}
|