From a489d523e314d4458e450333c72c85cfbbc135b8 Mon Sep 17 00:00:00 2001 From: David Gwilliam Date: Mon, 22 Jun 2026 04:20:01 -0700 Subject: [PATCH] fix: add null/HTTP checks to tag viewer API calls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - browseISO: resp.ok + data null check before accessing data.error - selectPartition: resp.ok + data null check - viewVolumeTags: resp.ok + data null check - Fixed v.Name → v.name (JSON keys are lowercase from volInfo tags) Prevents 'Cannot read properties of null (reading error)' --- web/ui/app.js | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/web/ui/app.js b/web/ui/app.js index ea7ca75..de9be09 100644 --- a/web/ui/app.js +++ b/web/ui/app.js @@ -428,9 +428,13 @@ async function browseISO() { try { const resp = await fetch(`${API}/disk/partitions?iso=${encodeURIComponent(iso)}`) + if (!resp.ok) { + status.textContent = 'HTTP ' + resp.status + return + } const data = await resp.json() - if (data.error) { - status.textContent = data.error + if (!data || data.error) { + status.textContent = (data && data.error) || 'server error' return } status.textContent = data.length + ' partition' + (data.length === 1 ? '' : 's') @@ -454,9 +458,13 @@ async function selectPartition(iso, part) { try { const resp = await fetch(`${API}/disk/volumes?iso=${encodeURIComponent(iso)}&part=${encodeURIComponent(part)}`) + if (!resp.ok) { + volsEl.innerHTML = 'HTTP ' + resp.status + '' + return + } const data = await resp.json() - if (data.error) { - volsEl.innerHTML = '' + data.error + '' + if (!data || data.error) { + volsEl.innerHTML = '' + (data && data.error ? data.error : 'server error') + '' return } if (!Array.isArray(data) || data.length === 0) { @@ -464,7 +472,7 @@ async function selectPartition(iso, part) { return } volsEl.innerHTML = data.map(v => ` -
${esc(v.Name)}
+
${esc(v.name)}
`).join('') } catch (e) { volsEl.innerHTML = 'Failed: ' + e.message @@ -480,9 +488,13 @@ async function viewVolumeTags(iso, part, vol) { try { const resp = await fetch(`${API}/volume/tags?iso=${encodeURIComponent(iso)}&part=${encodeURIComponent(part)}&vol=${encodeURIComponent(vol)}`) + if (!resp.ok) { + detailEl.innerHTML = 'HTTP ' + resp.status + '' + return + } const data = await resp.json() - if (data.error) { - detailEl.innerHTML = '' + data.error + '' + if (!data || data.error) { + detailEl.innerHTML = '' + (data && data.error ? data.error : 'server error') + '' return } if (!Array.isArray(data) || data.length === 0) {