diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 96aa4c7de..6cfc97e82 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -67,6 +67,7 @@ The type attribute can be add,update,fix,remove. Precompile regular expression in UnixFTPEntryParser.preParse(List<String>). + Guard against polynomial regular expression used on uncontrolled data in VMSVersioningFTPEntryParser. Add protected getters to FTPSClient #204. Add SubnetUtils.toString(). diff --git a/src/main/java/org/apache/commons/net/ftp/parser/VMSVersioningFTPEntryParser.java b/src/main/java/org/apache/commons/net/ftp/parser/VMSVersioningFTPEntryParser.java index 5f7635163..a74eac266 100644 --- a/src/main/java/org/apache/commons/net/ftp/parser/VMSVersioningFTPEntryParser.java +++ b/src/main/java/org/apache/commons/net/ftp/parser/VMSVersioningFTPEntryParser.java @@ -43,7 +43,13 @@ */ public class VMSVersioningFTPEntryParser extends VMSFTPEntryParser { - private static final String REGEX = "(.*?);([0-9]+)\\s*.*"; + /** + * Guard against polynomial regular expression used on uncontrolled data. + * Don't look for more than 20 digits for the version. + * Don't look for more than 80 spaces after the version. + * Don't look for more than 80 characters after the spaces. + */ + private static final String REGEX = "(.*?);([0-9]{1,20})\\s{0,80}.{0,80}"; private static final Pattern PATTERN = Pattern.compile(REGEX); /**