From 9574d4b2668948038f307e1962e8df9ee5099182 Mon Sep 17 00:00:00 2001 From: Patrick Schurig Date: Mon, 12 Oct 2026 12:36:59 +0200 Subject: [PATCH] =?UTF-8?q?[upstream-fix]=20SpotMarketManager::setEnabled?= =?UTF-8?q?=20:=20refuser=20plut=C3=B4t=20que=20d=C3=A9r=C3=A9f=C3=A9rence?= =?UTF-8?q?r=20un=20fournisseur=20nul?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `setEnabled(true)` appelait `m_currentProvider->enable()` sans vérifier qu'un fournisseur avait été retenu. Deux chemins y mènent : - l'identifiant persisté (`SpotMarket/providerId`) ne correspond à aucun fournisseur enregistré : `changeProvider()` échoue, le pointeur reste nul ; - aucun fournisseur n'est enregistré : `keys().first()` sur une liste vide. Le premier est atteignable en amont (fournisseur retiré entre deux versions, réglage reporté). Le second le devient dès qu'aucun fournisseur n'est compilé. Correctif isolé : l'activation est refusée en `qCWarning` et le gestionnaire reste désactivé. Co-Authored-By: Claude Opus 5.5 --- energyplugin/spotmarket/spotmarketmanager.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/energyplugin/spotmarket/spotmarketmanager.cpp b/energyplugin/spotmarket/spotmarketmanager.cpp index 624bd23..9f59fa2 100644 --- a/energyplugin/spotmarket/spotmarketmanager.cpp +++ b/energyplugin/spotmarket/spotmarketmanager.cpp @@ -59,11 +59,20 @@ void SpotMarketManager::setEnabled(bool enabled) QUuid providerId = settings.value("providerId").toUuid(); if (providerId.isNull()) { qCDebug(dcNymeaEnergy()) << "SpotMarketManager: Currently no spot market provider configured. Selecting the first available."; - changeProvider(m_availableProviders.keys().first()); + if (!m_availableProviders.isEmpty()) + changeProvider(m_availableProviders.keys().first()); } else { changeProvider(providerId); } + // [upstream-fix] No provider selected (none registered, or the persisted providerId is + // unknown): enabling would dereference a null provider. Refuse and stay disabled. + if (!m_currentProvider) { + qCWarning(dcNymeaEnergy()) << "SpotMarketManager: No spot market provider available. Spot market stays disabled."; + settings.endGroup(); // SpotMarket + return; + } + m_currentProvider->enable(); qCInfo(dcNymeaEnergy()) << "SpotMarketManager: Enabled using" << m_currentProvider;