fix(discovery): add null-safe validation for v3 array entries
Filter out null, undefined, or malformed entries in installed_plugins.json before accessing properties. Prevents fatal crash on corrupted data. Addresses cubic-dev-ai review feedback.
This commit is contained in:
Vendored
+4
-1
@@ -19452,9 +19452,12 @@ function v3EntryToInstallation(entry) {
|
|||||||
gitCommitSha: entry.gitCommitSha
|
gitCommitSha: entry.gitCommitSha
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
function isValidV3Entry(entry) {
|
||||||
|
return entry != null && typeof entry === "object" && typeof entry.name === "string" && typeof entry.marketplace === "string" && typeof entry.installPath === "string";
|
||||||
|
}
|
||||||
function extractPluginEntries(db) {
|
function extractPluginEntries(db) {
|
||||||
if (Array.isArray(db)) {
|
if (Array.isArray(db)) {
|
||||||
return db.map((entry) => [
|
return db.filter(isValidV3Entry).map((entry) => [
|
||||||
`${entry.name}@${entry.marketplace}`,
|
`${entry.name}@${entry.marketplace}`,
|
||||||
v3EntryToInstallation(entry)
|
v3EntryToInstallation(entry)
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -108,14 +108,26 @@ function v3EntryToInstallation(entry: InstalledPluginEntryV3): PluginInstallatio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isValidV3Entry(entry: unknown): entry is InstalledPluginEntryV3 {
|
||||||
|
return (
|
||||||
|
entry != null &&
|
||||||
|
typeof entry === "object" &&
|
||||||
|
typeof (entry as Record<string, unknown>).name === "string" &&
|
||||||
|
typeof (entry as Record<string, unknown>).marketplace === "string" &&
|
||||||
|
typeof (entry as Record<string, unknown>).installPath === "string"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
function extractPluginEntries(
|
function extractPluginEntries(
|
||||||
db: InstalledPluginsDatabase,
|
db: InstalledPluginsDatabase,
|
||||||
): Array<[string, PluginInstallation | undefined]> {
|
): Array<[string, PluginInstallation | undefined]> {
|
||||||
if (Array.isArray(db)) {
|
if (Array.isArray(db)) {
|
||||||
return db.map((entry) => [
|
return db
|
||||||
`${entry.name}@${entry.marketplace}`,
|
.filter(isValidV3Entry)
|
||||||
v3EntryToInstallation(entry),
|
.map((entry) => [
|
||||||
])
|
`${entry.name}@${entry.marketplace}`,
|
||||||
|
v3EntryToInstallation(entry),
|
||||||
|
])
|
||||||
}
|
}
|
||||||
if (db.version === 1) {
|
if (db.version === 1) {
|
||||||
return Object.entries(db.plugins).map(([key, installation]) => [key, installation])
|
return Object.entries(db.plugins).map(([key, installation]) => [key, installation])
|
||||||
|
|||||||
Reference in New Issue
Block a user