Skip to content

Commit fa55a1d

Browse files
committed
prevent polynomial regular expression used on uncontrolled data security issue
1 parent 547c36e commit fa55a1d

File tree

2 files changed

+9
-14
lines changed

2 files changed

+9
-14
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3219,21 +3219,15 @@ protected void addParentContainer(CodegenModel m, String name, Property property
32193219
* @return The underscored version of the word
32203220
*/
32213221
public static String underscore(String word) {
3222-
String firstPattern = "([A-Z]+)([A-Z][a-z][a-z]+)";
3223-
String secondPattern = "([a-z\\d])([A-Z])";
3222+
Pattern firstPattern = Pattern.compile("(?<=[A-Z])(?=[A-Z][a-z]{2,})");
3223+
Pattern secondPattern = Pattern.compile("(?<=[a-z\\d])(?=[A-Z])");
32243224
String replacementPattern = "$1_$2";
3225-
// Replace package separator with slash.
3226-
word = word.replaceAll("\\.", "/"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
3227-
// Replace $ with two underscores for inner classes.
3228-
word = word.replaceAll("\\$", "__");
3229-
// Replace capital letter with _ plus lowercase letter.
3230-
word = word.replaceAll(firstPattern, replacementPattern);
3231-
word = word.replaceAll(secondPattern, replacementPattern);
3232-
word = word.replace('-', '_');
3233-
// replace space with underscore
3234-
word = word.replace(' ', '_');
3235-
word = word.toLowerCase();
3236-
return word;
3225+
3226+
String replaced = word.replace('.', '/').replace("$", "__");
3227+
replaced = firstPattern.matcher(replaced).replaceAll("_");
3228+
replaced = secondPattern.matcher(replaced).replaceAll("_");
3229+
replaced = replaced.replace('-', '_').replace(' ', '_').toLowerCase();
3230+
return replaced;
32373231
}
32383232

32393233
/**

modules/swagger-codegen/src/test/java/io/swagger/codegen/CodegenTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public void underscoreNamesTest() {
5151

5252
Assert.assertEquals(codegen.underscore("FooBar"), "foo_bar");
5353
Assert.assertEquals(codegen.underscore("FooBarBaz"), "foo_bar_baz");
54+
Assert.assertEquals(codegen.underscore("HTTPServer"), "http_server");
5455
}
5556

5657
@Test(description = "test camelize")

0 commit comments

Comments
 (0)