Skip to content

[JENKINS-68774] envInject doesn't support loading straight java.util.Properties files #645

Description

@jenkins-infra-bot

Contrary to the resolution of https://issue-redirect.jenkins.io/issue/20334, the plugin doesn't always handle correctly straight java.util.Properties file. This shows that it is preprocessing the content of the properties file before loading it as a properties file. This can result in differences when properties files have some character for which java.util.Properties has special handling.

The plugin should provide, through a checkbox for backward compatibility, a capability to use straight properties file without any pre-processing.

Example of build steps demonstrating the character differences when a file is read by the envInject-plugin and when it is read by java.util.Properties:

  • Execute system Groovy script:
    File propertyFile = new File('/tmp/data.properties')
    println "Creating properties file ${propertyFile.absolutePath} using Properties.store(...)"
    Properties properties = new Properties()
    properties.setProperty('a', 'sh -c ls --sort=size')
    properties.setProperty('b', 'cmd /c dir C:\\')
    properties.setProperty('c', '`~!@#$%^&*()-_=+[{]}\\|;:\'"/?.>,<')
    properties.each { k, v ->
      println "${k}: ${v}"
    }
    propertyFile.withOutputStream {
      properties.store(it, '')
    }
    return
    
  • <li>Inject environment variables
    
    /tmp/data.properties
    
    <li>Execute shell
    
    Unable to find source-code formatter for language: shell. Available languages are: actionscript, ada, applescript, bash, c, c#, c++, cpp, css, erlang, go, groovy, haskell, html, java, javascript, js, json, lua, none, nyan, objc, perl, php, python, r, rainbow, ruby, scala, sh, sql, swift, visualbasic, xml, yaml
    set +x
    echo 'Content of properties file:'
    cat '/tmp/data.properties'
    echo 'Value of properties injected:'
    echo "a: ${a}"
    echo "b: ${b}"
    echo "c: ${c}"
    
  • Execute system Groovy script
    File propertyFile = new File('/tmp/data.properties')
    println "Value of properties loaded from ${propertyFile.absolutePath} using Properties.load():"
    Properties properties = new Properties()
    propertyFile.withInputStream {
      properties.load(it)
    }
    properties.each { k, v ->
      println "${k}: ${v}"
    }
    return
    

Output:

Creating properties file /tmp/data.properties using Properties.store(...)
a: sh -c ls --sort=size
b: cmd /c dir C:\
c: `~!@#$%^&*()-_=+[{]}\|;:'"/?.>,<
[EnvInject] - Injecting environment variables from a build step.
[EnvInject] - Injecting as environment variables the properties file path '/tmp/data.properties'
[EnvInject] - Variables injected successfully.
[workspace] $ /bin/sh -xe /tmp/jenkins14162689093876532933.sh
+ set +x
Content of properties file:
#
#Thu Jun 16 13:12:10 CDT 2022
a=sh -c ls --sort\=size
b=cmd /c dir C\:\\
c=`~\!@\#$%^&*()-_\=+[{]}\\|;\:'"/?.>,<
Value of properties injected:
a: sh -c ls --sort\=size
b: cmd /c dir C:\
c: `~\!@\#$%^&*()-_\=+[{]}\|;:'"/?.>,<
Value of properties loaded from /tmp/data.properties using Properties.load():
a: sh -c ls --sort=size
b: cmd /c dir C:\
c: `~!@#$%^&*()-_=+[{]}\|;:'"/?.>,<

Originally reported by georges474, imported from: envInject doesn't support loading straight java.util.Properties files
  • status: Open
  • priority: Major
  • component(s): envinject-plugin
  • resolution: Unresolved
  • votes: 0
  • watchers: 1
  • imported: 20251223-165436
Raw content of original issue

Contrary to the resolution of https://issues.jenkins.io/browse/JENKINS-20334, the plugin doesn't always handle correctly straight java.util.Properties file. This shows that it is preprocessing the content of the properties file before loading it as a properties file. This can result in differences when properties files have some character for which java.util.Properties has special handling.

The plugin should provide, through a checkbox for backward compatibility, a capability to use straight properties file without any pre-processing.

Example of build steps demonstrating the character differences when a file is read by the envInject-plugin and when it is read by java.util.Properties:

  • Execute system Groovy script:
    File propertyFile = new File('/tmp/data.properties')
    println "Creating properties file ${propertyFile.absolutePath} using Properties.store(...)"
    Properties properties = new Properties()
    properties.setProperty('a', 'sh -c ls --sort=size')
    properties.setProperty('b', 'cmd /c dir C:\\')
    properties.setProperty('c', '`~!@#$%^&*()-_=+[{]}\\|;:\'"/?.>,<')
    properties.each { k, v ->
      println "${k}: ${v}"
    }
    propertyFile.withOutputStream {
      properties.store(it, '')
    }
    return
    
  • Inject environment variables
    /tmp/data.properties
    
  • Execute shell
    Unable to find source-code formatter for language: shell. Available languages are: actionscript, ada, applescript, bash, c, c#, c++, cpp, css, erlang, go, groovy, haskell, html, java, javascript, js, json, lua, none, nyan, objc, perl, php, python, r, rainbow, ruby, scala, sh, sql, swift, visualbasic, xml, yaml
    set +x
    echo 'Content of properties file:'
    cat '/tmp/data.properties'
    echo 'Value of properties injected:'
    echo "a: ${a}"
    echo "b: ${b}"
    echo "c: ${c}"
    
  • Execute system Groovy script
    File propertyFile = new File('/tmp/data.properties')
    println "Value of properties loaded from ${propertyFile.absolutePath} using Properties.load():"
    Properties properties = new Properties()
    propertyFile.withInputStream {
      properties.load(it)
    }
    properties.each { k, v ->
      println "${k}: ${v}"
    }
    return
    

Output:

Creating properties file /tmp/data.properties using Properties.store(...)
a: sh -c ls --sort=size
b: cmd /c dir C:\
c: `~!@#$%^&*()-_=+[{]}\|;:'"/?.>,<
[EnvInject] - Injecting environment variables from a build step.
[EnvInject] - Injecting as environment variables the properties file path '/tmp/data.properties'
[EnvInject] - Variables injected successfully.
[workspace] $ /bin/sh -xe /tmp/jenkins14162689093876532933.sh
+ set +x
Content of properties file:
#
#Thu Jun 16 13:12:10 CDT 2022
a=sh -c ls --sort\=size
b=cmd /c dir C\:\\
c=`~\!@\#$%^&*()-_\=+[{]}\\|;\:'"/?.>,<
Value of properties injected:
a: sh -c ls --sort\=size
b: cmd /c dir C:\
c: `~\!@\#$%^&*()-_\=+[{]}\|;:'"/?.>,<
Value of properties loaded from /tmp/data.properties using Properties.load():
a: sh -c ls --sort=size
b: cmd /c dir C:\
c: `~!@#$%^&*()-_=+[{]}\|;:'"/?.>,<
  • environment: CentOS Linux release 7.7.1908, Jenkins 2.348, Environment Injector Plugin Version 2.866.v5c0403e3d4df

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions