Skip to content

Broken Windows path regex in FilteringUtils.getRelativeFilePath() #352

Description

@elharo

In src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java, lines 184 and 187:

if (toPath.matches("^\\\\\\[a-zA-Z]:")) {
    toPath = toPath.substring(1);
}
if (fromPath.matches("^\\\\\\[a-zA-Z]:")) {
    fromPath = fromPath.substring(1);
}

The regex ^\\\\[a-zA-Z]: has a double-escaped backslash before the character class [a-zA-Z], making \\[ match a literal [ character at the start. The intended regex is ^[a-zA-Z]: — a drive letter followed by a colon at the start of the path. This regex will never match a Windows absolute path like C:\\foo, so the leading-slash stripping logic never executes. This is effectively dead code.

On Windows this could cause incorrect normalization of paths like /C:/foo where the leading / should be stripped.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions