[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:
parent
a45b10b457
commit
9574d4b266
@ -59,11 +59,20 @@ void SpotMarketManager::setEnabled(bool enabled)
|
|||||||
QUuid providerId = settings.value("providerId").toUuid();
|
QUuid providerId = settings.value("providerId").toUuid();
|
||||||
if (providerId.isNull()) {
|
if (providerId.isNull()) {
|
||||||
qCDebug(dcNymeaEnergy()) << "SpotMarketManager: Currently no spot market provider configured. Selecting the first available.";
|
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 {
|
} else {
|
||||||
changeProvider(providerId);
|
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();
|
m_currentProvider->enable();
|
||||||
qCInfo(dcNymeaEnergy()) << "SpotMarketManager: Enabled using" << m_currentProvider;
|
qCInfo(dcNymeaEnergy()) << "SpotMarketManager: Enabled using" << m_currentProvider;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user