From 4166825c52a3d89ec11c9ee40c531861168f87e9 Mon Sep 17 00:00:00 2001 From: Saurabh Kumar Bajpai Date: Wed, 17 Jun 2026 12:59:20 +0530 Subject: [PATCH] fix: handle corrupt localStorage bookmarks in Matchmaker (#566) - Wrap JSON.parse in try/catch to prevent SyntaxError crash - Purge corrupt entries on parse failure - Add guest-to-user bookmark migration on login - Wrap setItem in try/catch for storage quota errors --- src/pages/Matchmaker.jsx | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/src/pages/Matchmaker.jsx b/src/pages/Matchmaker.jsx index 5a8d22d..e36fb0b 100644 --- a/src/pages/Matchmaker.jsx +++ b/src/pages/Matchmaker.jsx @@ -85,14 +85,43 @@ export const Matchmaker = () => { const [rateLimited, setRateLimited] = useState(false); // Bookmarks State (Stored locally) + const safeLoadBookmarks = (key) => { + try { + const raw = localStorage.getItem(key); + if (!raw) return []; + const parsed = JSON.parse(raw); + return Array.isArray(parsed) ? parsed : []; + } catch { + localStorage.removeItem(key); + return []; + } + }; + const [bookmarks, setBookmarks] = useState(() => { - const cached = localStorage.getItem(`matchmaker_bookmarks_${user?.uid || "guest"}`); - return cached ? JSON.parse(cached) : []; + const userKey = `matchmaker_bookmarks_${user?.uid || "guest"}`; + if (user?.uid) { + const saved = safeLoadBookmarks(userKey); + if (saved.length === 0) { + const guestSaved = safeLoadBookmarks("matchmaker_bookmarks_guest"); + if (guestSaved.length > 0) { + localStorage.setItem(userKey, JSON.stringify(guestSaved)); + localStorage.removeItem("matchmaker_bookmarks_guest"); + return guestSaved; + } + } + return saved; + } + return safeLoadBookmarks(userKey); }); // Save Bookmarks to localStorage when updated useEffect(() => { - localStorage.setItem(`matchmaker_bookmarks_${user?.uid || "guest"}`, JSON.stringify(bookmarks)); + const key = `matchmaker_bookmarks_${user?.uid || "guest"}`; + try { + localStorage.setItem(key, JSON.stringify(bookmarks)); + } catch { + console.warn("Failed to save bookmarks to localStorage"); + } }, [bookmarks, user]); // GitHub Search API Caller