Skip to content

Commit 3cc00dc

Browse files
committed
increase safety in reading and serialization
1 parent e4377a9 commit 3cc00dc

2 files changed

Lines changed: 32 additions & 12 deletions

File tree

src/DataFlowGraphModel.cpp

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -271,14 +271,14 @@ QVariant DataFlowGraphModel::nodeData(NodeId nodeId, NodeRole role) const
271271
break;
272272

273273
case NodeRole::Style: {
274-
auto style = _models.at(nodeId)->nodeStyle();
274+
auto style = model->nodeStyle();
275275
result = style.toJson().toVariantMap();
276276
} break;
277277

278278
case NodeRole::InternalData: {
279279
QJsonObject nodeJson;
280280

281-
nodeJson["internal-data"] = _models.at(nodeId)->save();
281+
nodeJson["internal-data"] = model->save();
282282

283283
result = nodeJson.toVariantMap();
284284
break;
@@ -302,13 +302,16 @@ QVariant DataFlowGraphModel::nodeData(NodeId nodeId, NodeRole role) const
302302
result = QVariant::fromValue(validationState);
303303
} break;
304304

305-
case NodeRole::LabelVisible:
306-
result = _labelsVisible.at(nodeId);
307-
break;
305+
case NodeRole::LabelVisible: {
306+
auto const labelVisibleIt = _labelsVisible.find(nodeId);
307+
result = (labelVisibleIt != _labelsVisible.end()) ? labelVisibleIt->second
308+
: model->labelVisible();
309+
} break;
308310

309-
case NodeRole::Label:
310-
result = _labels.at(nodeId);
311-
break;
311+
case NodeRole::Label: {
312+
auto const labelIt = _labels.find(nodeId);
313+
result = (labelIt != _labels.end()) ? labelIt->second : model->label();
314+
} break;
312315

313316
case NodeRole::LabelEditable:
314317
result = model->labelEditable();
@@ -532,12 +535,22 @@ QJsonObject DataFlowGraphModel::saveNode(NodeId const nodeId) const
532535
{
533536
QJsonObject nodeJson;
534537

538+
auto const modelIt = _models.find(nodeId);
539+
if (modelIt == _models.end()) {
540+
return nodeJson;
541+
}
542+
543+
auto const &model = modelIt->second;
544+
535545
nodeJson["id"] = static_cast<qint64>(nodeId);
546+
nodeJson["internal-data"] = model->save();
536547

537-
nodeJson["internal-data"] = _models.at(nodeId)->save();
548+
auto const labelIt = _labels.find(nodeId);
549+
nodeJson["label"] = (labelIt != _labels.end()) ? labelIt->second : model->label();
538550

539-
nodeJson["label"] = _labels.at(nodeId);
540-
nodeJson["labelVisible"] = _labelsVisible.at(nodeId);
551+
auto const labelVisibleIt = _labelsVisible.find(nodeId);
552+
nodeJson["labelVisible"] = (labelVisibleIt != _labelsVisible.end()) ? labelVisibleIt->second
553+
: model->labelVisible();
541554

542555
{
543556
QPointF const pos = nodeData(nodeId, NodeRole::Position).value<QPointF>();

src/NodeGroup.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,14 @@ QByteArray NodeGroup::saveToFile() const
3737

3838
QJsonArray nodesJson;
3939
for (auto const &node : _childNodes) {
40-
nodesJson.append(node->save());
40+
if (!node)
41+
continue;
42+
43+
QJsonObject const nodeJson = node->save();
44+
if (nodeJson.isEmpty())
45+
continue;
46+
47+
nodesJson.append(nodeJson);
4148
}
4249
groupJson["nodes"] = nodesJson;
4350

0 commit comments

Comments
 (0)