@cryptotaxi247 / kubo / commits / 2a669d869

fix: SweepingProvider shouldn't error when missing DHT (#10975)

* fix: SweepingProvider shouldn't error when missing DHT * fix: prevent panic when SweepingProvider has no DHT when SweepingProvider is enabled but no DHT is available (e.g., Routing.Type=none), the daemon would panic with a nil pointer dereference in ResettableKeystore.ResetCids. this fix: - returns NoopProvider when no DHT implementation is available - skips keystore initialization for NoopProvider to avoid unnecessary operations - allows nodes to run without DHT when using HTTP-only routing or offline mode the panic occurred because initKeyStore tried to access a nil keystore when SweepingProvider returned nil for the keystore parameter. by checking if the provider is NoopProvider and skipping keystore operations, we avoid the panic while maintaining correct behavior for all other provider types. cc #10974 #10975 --------- Co-authored-by: Marcin Rataj <lidel@lidel.org>

Guillaume Michel committed Sep 19, 2025 at 19:59 UTC 2a669d869bd27186dcc2cd6f05be68942f4d2325
1 file changed +6 -7
core/node/provider.go
+6 -7
@@ -355,13 +355,7 @@ func SweepingProviderOpt(cfg *config.Config) fx.Option {
355 }
356 }
357 if impl == nil {
358 - // No DHT available, check if HTTP provider is configured
359 - cfg, err := in.Repo.Config()
360 - if err == nil && cfg.HasHTTPProviderConfigured() {
361 - // HTTP provider is configured, return NoopProvider to allow HTTP-based providing
362 - return &NoopProvider{}, keyStore, nil
363 - }
364 - return &NoopProvider{}, nil, errors.New("provider: no valid DHT available for providing")
358 + return &NoopProvider{}, nil, nil
359 }
360
361 var selfAddrsFunc func() []ma.Multiaddr
@@ -403,6 +397,11 @@ func SweepingProviderOpt(cfg *config.Config) fx.Option {
397 KeyProvider provider.KeyChanFunc
398 }
399 initKeyStore := fx.Invoke(func(lc fx.Lifecycle, in keystoreInput) {
400 + // Skip keystore initialization for NoopProvider
401 + if _, ok := in.Provider.(*NoopProvider); ok {
402 + return
403 + }
404 +
405 var (
406 cancel context.CancelFunc
407 done = make(chan struct{})