From 928a77aab41f3493f5d20ee183beb94055241da7 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Mon, 28 Apr 2025 23:50:01 -0400 Subject: [PATCH] Fix invalid row access in GearListModel This was based off some previous, bad assumptions in Physis where a row id of 0 was valid. Now we do proper null checks! --- apps/armoury/src/gearlistmodel.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/apps/armoury/src/gearlistmodel.cpp b/apps/armoury/src/gearlistmodel.cpp index bf6a44b..321709a 100644 --- a/apps/armoury/src/gearlistmodel.cpp +++ b/apps/armoury/src/gearlistmodel.cpp @@ -175,21 +175,25 @@ void GearListModel::exdFinished(int index) auto exd = exdFuture->resultAt(index); for (unsigned int i = 0; i < exh->row_count; i++) { - const auto row = physis_exd_read_row(&exd, i); // TODO: use all rows, free + const auto rows = physis_exd_read_row(&exd, i); // TODO: use all rows, free + for (int j = 0; j < rows.row_count; j++) { + auto row = rows.row_data[j]; + if (row.column_data != nullptr) { + auto primaryModel = row.column_data[47].u_int64._0; + // auto secondaryModel = row.column_data[48].u_int64._0; - auto primaryModel = row.row_data[0].column_data[47].u_int64._0; - // auto secondaryModel = row.column_data[48].u_int64._0; + int16_t parts[4]; + memcpy(parts, &primaryModel, sizeof(int16_t) * 4); - int16_t parts[4]; - memcpy(parts, &primaryModel, sizeof(int16_t) * 4); + GearInfo info = {}; + info.name = row.column_data[9].string._0; + info.icon = row.column_data[10].u_int16._0; + info.slot = physis_slot_from_id(row.column_data[17].u_int8._0); + info.modelInfo.primaryID = parts[0]; - GearInfo info = {}; - info.name = row.row_data[0].column_data[9].string._0; - info.icon = row.row_data[0].column_data[10].u_int16._0; - info.slot = physis_slot_from_id(row.row_data[0].column_data[17].u_int8._0); - info.modelInfo.primaryID = parts[0]; - - gears.push_back(info); + gears.push_back(info); + } + } } }