Fix missing bounds checks, unsafe JSON.parse, and cleanup issues

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-09 13:56:47 +08:00
parent 48784010ad
commit 6141e70235
4 changed files with 22 additions and 12 deletions

View File

@@ -73,11 +73,17 @@ export const useCytoscapeStore = defineStore('cytoscapeStore', {
* @param {string} direction - Layout direction ('TB' or 'LR').
*/
loadPositionsFromStorage(direction: string) {
if (localStorage.getItem(SAVE_KEY_NAME) &&
JSON.parse(
localStorage.getItem(SAVE_KEY_NAME))[this.currentGraphId]) {
this.nodePositions[this.currentGraphId][direction] = JSON.parse(
localStorage.getItem(SAVE_KEY_NAME))[this.currentGraphId][direction];
try {
const raw = localStorage.getItem(SAVE_KEY_NAME);
if (raw) {
const parsed = JSON.parse(raw);
if (parsed[this.currentGraphId]) {
this.nodePositions[this.currentGraphId][direction] =
parsed[this.currentGraphId][direction];
}
}
} catch {
// Corrupted localStorage data; ignore and use defaults
}
},
/**

View File

@@ -174,8 +174,10 @@ export const useFilesStore = defineStore("filesStore", {
// msg: 'not in UTF-8' | 'insufficient columns' | 'the csv file is empty' | 'the filename does not ends with .csv'
// type: 'encoding' | 'insufficient_columns' | 'empty' | 'name_suffix'
const detail = error.response.data.detail;
uploadFailedFirst(detail[0].type, detail[0].msg, detail[0].loc[2]);
if (Array.isArray(detail) && detail.length > 0) {
const loc = detail[0].loc;
uploadFailedFirst(detail[0].type, detail[0].msg, Array.isArray(loc) && loc.length > 2 ? loc[2] : undefined);
}
} else {
Swal.close(); // Close the loading progress bar
apiError(error, "Failed to upload the files.");

View File

@@ -192,7 +192,7 @@ export const useMapPathStore = defineStore('mapPathStore', {
if (listIndex >= curButton.length) { // Bounds check to prevent out-of-range access
return; // nodeIndex is the path index in the list after selecting one of the five buttons
}
if (nodeIndex >= curButton[listIndex]) { // Bounds check to prevent out-of-range access
if (nodeIndex >= curButton[listIndex].length) { // Bounds check to prevent out-of-range access
return; // The node index within this path in the list
}
// If `curPath` and `curButton[listIndex]` fully match