diff --git a/anonymous_login/anonymous_login.post_update.php b/anonymous_login/anonymous_login.post_update.php
index cb71bb7e..302b9379 100644
--- a/anonymous_login/anonymous_login.post_update.php
+++ b/anonymous_login/anonymous_login.post_update.php
@@ -10,6 +10,20 @@
  */
 function anonymous_login_post_update_path_array() {
   $config = \Drupal::configFactory()->getEditable('anonymous_login.settings');
-  $paths = array_filter(array_map('trim', explode(PHP_EOL, $config->get('paths') ?? '')));
+
+  // Get raw config value.
+  $paths_raw = $config->get('paths');
+
+  // Handle case 1: Already stored as array (new format).
+  if (is_array($paths_raw)) {
+    $paths = array_map('trim', $paths_raw);
+  }
+  // Handle case 2: Stored as a string (old format).
+  else {
+    // Cast to string to avoid explode(null) fatal error on PHP 8.1+.
+    $paths_string = (string) $paths_raw;
+    $paths = array_filter(array_map('trim', explode(PHP_EOL, $paths_string)));
+  }
+
   $config->set('paths', $paths)->save();
 }