This is an automated email from the ASF dual-hosted git repository. juanpablo pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/jspwiki.git
commit b553be9b9882a529133c414cc9386b32f62743a2 Author: Alex O'Ree <alexo...@apache.org> AuthorDate: Sat Mar 30 10:45:49 2024 -0400 JSPWIKI-1188 system property expansion --- .../java/org/apache/wiki/util/PropertyReader.java | 22 +++++++++++++++++++++- .../org/apache/wiki/util/PropertyReaderTest.java | 8 ++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/jspwiki-util/src/main/java/org/apache/wiki/util/PropertyReader.java b/jspwiki-util/src/main/java/org/apache/wiki/util/PropertyReader.java index ac1fa9139..70daf8325 100644 --- a/jspwiki-util/src/main/java/org/apache/wiki/util/PropertyReader.java +++ b/jspwiki-util/src/main/java/org/apache/wiki/util/PropertyReader.java @@ -292,13 +292,33 @@ public final class PropertyReader { Enumeration< ? > propertyList = properties.propertyNames(); while( propertyList.hasMoreElements() ) { final String propertyName = ( String )propertyList.nextElement(); - final String propertyValue = properties.getProperty( propertyName ); + String propertyValue = properties.getProperty( propertyName ); if ( propertyName.startsWith( PARAM_VAR_DECLARATION ) ) { final String varName = propertyName.substring( 4 ).trim(); final String varValue = propertyValue.trim(); vars.put( varName, varValue ); } + boolean subsitution=false; + while ( propertyValue.contains( "${" ) && propertyValue.contains( "}" ) ) { + int start = propertyValue.indexOf( "${" ); + int end = propertyValue.indexOf( "}" ); + if ( start == -1 || end == -1 ) break; + if ( end > start ) { + String substring = propertyValue.substring( start, end ).replace( "${", "" ).replace( "}", "" ); + if (System.getProperty( substring ) != null ) { + propertyValue = propertyValue.replace( "${" + substring + "}", System.getProperty( substring ) ); + subsitution = true; + } else break; + } else { + //this would be a strange issue of a value like + // foo}${bar + break; + } + } + if ( subsitution ) { + properties.setProperty( propertyName, propertyValue ); + } } //now, substitute $ values in property values with vars... diff --git a/jspwiki-util/src/test/java/org/apache/wiki/util/PropertyReaderTest.java b/jspwiki-util/src/test/java/org/apache/wiki/util/PropertyReaderTest.java index f4e21b744..f126b10f6 100644 --- a/jspwiki-util/src/test/java/org/apache/wiki/util/PropertyReaderTest.java +++ b/jspwiki-util/src/test/java/org/apache/wiki/util/PropertyReaderTest.java @@ -68,6 +68,14 @@ public class PropertyReaderTest { Assertions.assertTrue( p.getProperty( "jspwiki.xyz" ).endsWith( "test basedir" ) ); //don't touch this Assertions.assertFalse( p.getProperty( "jspwiki.workDir" ).endsWith( "$basedir/wrk/" ) ); } + @Test + public void testSystemPropertyInjection() { + System.setProperty("FOO", "BAR"); + final Properties p = new Properties(); + p.put( "jspwiki.fileSystemProvider.pageDir", "${FOO}/www/" ); + PropertyReader.expandVars( p ); + Assertions.assertTrue( p.getProperty( "jspwiki.fileSystemProvider.pageDir" ).equals( "BAR/www/" ) ); + } @Test public void testVariableExpansion2() {