[upstream-fix] SpotMarketManager::setEnabled : refuser plutôt que déréférencer un fournisseur nul

`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 <noreply@anthropic.com>
This commit is contained in:
Patrick Schurig 2026-10-12 12:36:59 +02:00
parent a45b10b457
commit 9574d4b266

View File

@ -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;