summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSierraffinity <sierra@domoreaweso.me>2020-12-26 17:39:24 -0800
committerSierraffinity <sierra@domoreaweso.me>2020-12-26 17:39:52 -0800
commit86fdd033c62d54d679f2c28b5f446e2ef2df7e3e (patch)
treea257bd1064c5e5c11cb831df61f9f6a1248e2bf4
parentb155c307eadea2e5bd168abfce7df677d0edba8f (diff)
Add UBFIX for null derefs in sub_8088950
-rw-r--r--src/fieldmap.c24
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;
}