diff --git a/app/jsonDoc.server.ts b/app/jsonDoc.server.ts index a3b82f9d9..378c7d02a 100644 --- a/app/jsonDoc.server.ts +++ b/app/jsonDoc.server.ts @@ -45,6 +45,15 @@ export async function createFromUrlOrRawJson( if (isXML(urlOrJson)) { return createFromRawXml("Untitled", urlOrJson); } + + try { + JSON.parse(urlOrJson); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : "Invalid JSON format"; + throw new Error(`Invalid JSON syntax: ${errorMessage}`); + } + + return undefined; } export async function createFromUrl( @@ -158,7 +167,7 @@ function isJSON(possibleJson: string): boolean { try { JSON.parse(possibleJson); return true; - } catch (e: any) { - throw new Error(e.message); + } catch { + return false; } } diff --git a/app/routes/actions/createFromUrl.ts b/app/routes/actions/createFromUrl.ts index 9e02761b9..22ece58d0 100644 --- a/app/routes/actions/createFromUrl.ts +++ b/app/routes/actions/createFromUrl.ts @@ -58,7 +58,11 @@ export let action: ActionFunction = async ({ request, context }) => { return redirect(`/j/${doc.id}`); } catch (e) { if (e instanceof Error) { - setErrorMessage(toastCookie, e.message, "Something went wrong"); + if (e.message.includes("Invalid JSON syntax")) { + setErrorMessage(toastCookie, "Invalid JSON", e.message); + } else { + setErrorMessage(toastCookie, e.message, "Something went wrong"); + } } else { setErrorMessage(toastCookie, "Unknown error", "Something went wrong"); }