diff options
author | Sierraffinity <sierra@domoreaweso.me> | 2020-12-26 17:39:24 -0800 |
---|---|---|
committer | Sierraffinity <sierra@domoreaweso.me> | 2020-12-26 17:39:52 -0800 |
commit | 86fdd033c62d54d679f2c28b5f446e2ef2df7e3e (patch) | |
tree | a257bd1064c5e5c11cb831df61f9f6a1248e2bf4 | |
parent | b155c307eadea2e5bd168abfce7df677d0edba8f (diff) |
Add UBFIX for null derefs in sub_8088950
-rw-r--r-- | src/fieldmap.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/src/fieldmap.c b/src/fieldmap.c index 49337ebbe..296c4edf2 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -797,15 +797,33 @@ bool8 CameraMove(int x, int y) struct MapConnection *sub_8088950(u8 direction, int x, int y) { int count; - struct MapConnection *connection; int i; - count = gMapHeader.connections->count; - connection = gMapHeader.connections->connections; + struct MapConnection *connection; + const struct MapConnections *connections = gMapHeader.connections; + // UB: Multiple possible null dereferences +#ifdef UBFIX + if (connections != NULL) + { + count = connections->count; + connection = connections->connections; + if (connection != NULL) + { + for (i = 0; i < count; i++, connection++) + { + if (connection->direction == direction && sub_80889A8(direction, x, y, connection) == TRUE) + return connection; + } + } + } +#else + count = connections->count; + connection = connections->connections; for (i = 0; i < count; i++, connection++) { if (connection->direction == direction && sub_80889A8(direction, x, y, connection) == TRUE) return connection; } +#endif return NULL; } |