n8n/packages/@n8n/instance-ai/evaluations/computer-use/path-utils.ts
Bernhard Wittmann b445221c6a
feat: Computer-use evaluation harness (no-changelog) (#29797)
Co-authored-by: Elias Meire <elias@meire.dev>
2026-05-12 08:36:12 +00:00

18 lines
710 B
TypeScript

import { isAbsolute, relative } from 'node:path';
/**
* True when `fullResolved` is strictly inside `rootResolved`. Both inputs must
* already be absolute — callers decide whether to use `resolve()` or
* `realpath()` depending on whether symlink containment matters.
*
* Rejects: equal paths, `..` traversal, and any absolute `relative()` result
* (POSIX `/foo`, Windows drive-qualified `D:\foo`, or UNC `\\server\share`).
*/
export function isContained(rootResolved: string, fullResolved: string): boolean {
const rel = relative(rootResolved, fullResolved);
if (rel === '') return false;
if (rel === '..' || rel.startsWith('..')) return false;
if (isAbsolute(rel)) return false;
return true;
}