fix: handle malformed URLs gracefully during import/export (#1868)

* Handling malformed URLs gracefully

* Allow import of invalid URLs, but adding logging.

---------

Co-authored-by: gpapp <gergely.papp@itworks.hu>
This commit is contained in:
Philip Okugbe
2026-01-25 00:48:43 +00:00
committed by GitHub
parent 5dbf0027bd
commit 54775f537d
5 changed files with 51 additions and 10 deletions
@@ -1,4 +1,5 @@
import { getEmbedUrlAndProvider } from '@docmost/editor-ext';
import { Logger } from '@nestjs/common';
import * as path from 'path';
import { v7 } from 'uuid';
import { InsertableBacklink } from '@docmost/db/types/entity.types';
@@ -280,8 +281,18 @@ export async function rewriteInternalLinksToMentionHtml(
const $a = $(el);
const raw = $a.attr('href')!;
if (raw.startsWith('http') || raw.startsWith('/api/')) return;
let decodedRaw = raw;
try {
decodedRaw = decodeURIComponent(raw);
} catch (err) {
Logger.warn(
`URI malformed in page ${currentFilePath}: ${raw}. Falling back to raw path.`,
'ImportFormatter',
);
}
const resolved = normalize(
path.join(path.dirname(currentFilePath), decodeURIComponent(raw)),
path.join(path.dirname(currentFilePath), decodedRaw),
);
const meta = filePathToPageMetaMap.get(resolved);
if (!meta) return;
@@ -1,3 +1,4 @@
import { Logger } from '@nestjs/common';
import { promises as fs } from 'fs';
import * as path from 'path';
@@ -30,8 +31,13 @@ export function resolveRelativeAttachmentPath(
pageDir: string,
attachmentCandidates: Map<string, string>,
): string | null {
const mainRel = decodeURIComponent(raw.replace(/^\.?\/+/, ''));
const fallback = path.normalize(path.join(pageDir, mainRel));
let mainRel = raw.replace(/^\.?\/+/, '');
try {
mainRel = decodeURIComponent(mainRel);
} catch (err) {
Logger.warn(`URI malformed for attachment path: ${mainRel}. Falling back to raw path.`, 'ImportUtils');
}
const fallback = path.normalize(path.join(pageDir, mainRel)).split(path.sep).join('/');
if (attachmentCandidates.has(mainRel)) {
return mainRel;