2022-02-22 12:29:26 +01:00
|
|
|
'use strict'
|
|
|
|
|
|
2021-12-23 10:31:29 +01:00
|
|
|
const { ALIAS_MAX_PATH_LENGTH } = require('./_constants')
|
|
|
|
|
const resolveRelativeFromFile = require('./_resolveRelativeFromFile')
|
2021-11-08 14:46:00 +01:00
|
|
|
|
2021-12-23 10:31:29 +01:00
|
|
|
function isVhdAlias(filename) {
|
2021-11-08 14:46:00 +01:00
|
|
|
return filename.endsWith('.alias.vhd')
|
|
|
|
|
}
|
2021-12-23 10:31:29 +01:00
|
|
|
exports.isVhdAlias = isVhdAlias
|
2021-11-08 14:46:00 +01:00
|
|
|
|
2022-01-18 15:33:31 +01:00
|
|
|
exports.resolveVhdAlias = async function resolveVhdAlias(handler, filename) {
|
2021-11-08 14:46:00 +01:00
|
|
|
if (!isVhdAlias(filename)) {
|
|
|
|
|
return filename
|
|
|
|
|
}
|
2021-12-12 14:19:40 +01:00
|
|
|
const size = await handler.getSize(filename)
|
|
|
|
|
if (size > ALIAS_MAX_PATH_LENGTH) {
|
|
|
|
|
// seems reasonnable for a relative path
|
|
|
|
|
throw new Error(`The alias file ${filename} is too big (${size} bytes)`)
|
|
|
|
|
}
|
2021-11-08 14:46:00 +01:00
|
|
|
const aliasContent = (await handler.readFile(filename)).toString().trim()
|
|
|
|
|
// also handle circular references and unreasonnably long chains
|
|
|
|
|
if (isVhdAlias(aliasContent)) {
|
|
|
|
|
throw new Error(`Chaining alias is forbidden ${filename} to ${aliasContent}`)
|
|
|
|
|
}
|
|
|
|
|
// the target is relative to the alias location
|
|
|
|
|
return resolveRelativeFromFile(filename, aliasContent)
|
|
|
|
|
}
|