engine: resources: Detect simple self-referential frags

It would be a likely mistake to create a self-referential frag, and mgmt
would spin forever updating the file... We probably don't want this, so
let's just catch this case in Validate.

Of course you could get around this with multiple files, and a fancier
search could statically check the graph, but the goal isn't to prevent
any bad code, since that's not likely to be possible.
This commit is contained in:
James Shubin
2025-02-15 06:58:15 -05:00
parent 5d63376087
commit d80ec4aaa7
2 changed files with 23 additions and 0 deletions

View File

@@ -327,6 +327,13 @@ func (obj *FileRes) Validate() error {
if !strings.HasPrefix(frag, "/") {
return fmt.Errorf("the frag (`%s`) isn't an absolute path", frag)
}
// If the file is inside one of our fragment dirs, then this
// would make an infinite loop mess. We can't prevent this
// happening in other ways with multiple dirs doing this for
// each other, but we can at least catch the common case.
if util.HasPathPrefix(obj.getPath(), frag) {
return fmt.Errorf("inside a frag (`%s`)", frag)
}
}
if obj.Purge && (isContent || isFrag) {