Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-13412

Gradle plugin fails to quote parameters without whitespace when containing input/output redirection symbols, e.g. in XML strings

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved (View Workflow)
    • Priority: Major
    • Resolution: Fixed
    • Component/s: gradle-plugin
    • Labels:
      None
    • Environment:
      Windows Server 2008 R2
      Jenkins 1.424.6
      Jenkins Gradle Plugin 1.12
    • Similar Issues:

      Description

      Gradle plugin explicitly passes job parameters to the "cmd.exe /c gradle.bat" call.

      If one of these arguments looks like XML, but does not contain whitespace, it is not quoted. This leads to problems with input/output redirection symbols (less-than, greater-than)

      Example String Parameter value:

      <fail>
      

      Results in the following build output:

      [workspace] $ cmd.exe /C C:\path\to\gradle.bat -Dfoo=<fail> -i && exit %%ERRORLEVEL%%
      The system cannot find the file specified.
      Build step 'Invoke Gradle script' changed build result to FAILURE
      Build step 'Invoke Gradle script' marked build as failure
      Notifying upstream projects of job completion
      

      Real world example:
      Copy artifacts plugin's "Latest successful build" has the value:

      <StatusBuildSelector/>
      

      This results in "File not found" errors on Windows Server. Not tested on Linux.

        Attachments

          Activity

          Hide
          gbois Gregory Boissinot added a comment -

          Thanks for your comment.
          Unfortunately, I can't reproduce an error with the latest value in my environment with the Gradle plugin.
          I'm closing the issue.
          Do no hesitate to reopen it when you would successes to isolate the problem with only the Gradle plugin.

          Show
          gbois Gregory Boissinot added a comment - Thanks for your comment. Unfortunately, I can't reproduce an error with the latest value in my environment with the Gradle plugin. I'm closing the issue. Do no hesitate to reopen it when you would successes to isolate the problem with only the Gradle plugin.
          Hide
          danielbeck Daniel Beck added a comment -

          Minimal example that fails on Windows (Jenkins 1.447.1, Jenkins Gradle Plugin 1.16) when using default parameter value, which was specified in previous comments:

          <?xml version='1.0' encoding='UTF-8'?>
          <project>
            <actions/>
            <description></description>
            <keepDependencies>false</keepDependencies>
            <properties>
              <hudson.model.ParametersDefinitionProperty>
                <parameterDefinitions>
                  <hudson.model.StringParameterDefinition>
                    <name>FOO</name>
                    <description></description>
                    <defaultValue>&lt;foo&gt; &lt;bar/&gt; &lt;/foo&gt;</defaultValue>
                  </hudson.model.StringParameterDefinition>
                </parameterDefinitions>
              </hudson.model.ParametersDefinitionProperty>
            </properties>
            <scm class="hudson.scm.NullSCM"/>
            <canRoam>true</canRoam>
            <disabled>false</disabled>
            <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
            <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
            <triggers class="vector"/>
            <concurrentBuild>false</concurrentBuild>
            <builders>
              <hudson.plugins.gradle.Gradle>
                <description></description>
                <switches></switches>
                <tasks></tasks>
                <rootBuildScriptDir></rootBuildScriptDir>
                <buildFile></buildFile>
                <gradleName>Gradle 1.0 RC3</gradleName>
                <useWrapper>false</useWrapper>
              </hudson.plugins.gradle.Gradle>
            </builders>
            <publishers/>
            <buildWrappers/>
          </project>
          

          Build log:

          Started by user anonymous
          [Gradle] - Launching build.
          [fail gradle call] $ cmd.exe /C C:\JenkinsHome\tools\Gradle_1.0_RC3\bin\gradle.bat '-DFOO="<foo> <bar/> </foo>"' && exit %%ERRORLEVEL%%
          < was unexpected at this time.
          Build step 'Invoke Gradle script' changed build result to FAILURE
          Build step 'Invoke Gradle script' marked build as failure
          Finished: FAILURE
          
          Show
          danielbeck Daniel Beck added a comment - Minimal example that fails on Windows (Jenkins 1.447.1, Jenkins Gradle Plugin 1.16) when using default parameter value, which was specified in previous comments: <?xml version= '1.0' encoding= 'UTF-8' ?> <project> <actions/> <description></description> <keepDependencies> false </keepDependencies> <properties> <hudson.model.ParametersDefinitionProperty> <parameterDefinitions> <hudson.model.StringParameterDefinition> <name>FOO</name> <description></description> <defaultValue>&lt;foo&gt; &lt;bar/&gt; &lt;/foo&gt;</defaultValue> </hudson.model.StringParameterDefinition> </parameterDefinitions> </hudson.model.ParametersDefinitionProperty> </properties> <scm class= "hudson.scm.NullSCM" /> <canRoam> true </canRoam> <disabled> false </disabled> <blockBuildWhenDownstreamBuilding> false </blockBuildWhenDownstreamBuilding> <blockBuildWhenUpstreamBuilding> false </blockBuildWhenUpstreamBuilding> <triggers class= "vector" /> <concurrentBuild> false </concurrentBuild> <builders> <hudson.plugins.gradle.Gradle> <description></description> <switches></switches> <tasks></tasks> <rootBuildScriptDir></rootBuildScriptDir> <buildFile></buildFile> <gradleName>Gradle 1.0 RC3</gradleName> <useWrapper> false </useWrapper> </hudson.plugins.gradle.Gradle> </builders> <publishers/> <buildWrappers/> </project> Build log: Started by user anonymous [Gradle] - Launching build. [fail gradle call] $ cmd.exe /C C:\JenkinsHome\tools\Gradle_1.0_RC3\bin\gradle.bat '-DFOO= "<foo> <bar/> </foo>" ' && exit %%ERRORLEVEL%% < was unexpected at this time. Build step 'Invoke Gradle script' changed build result to FAILURE Build step 'Invoke Gradle script' marked build as failure Finished: FAILURE
          Hide
          jglick Jesse Glick added a comment -

          According to http://www.gradle.org/docs/current/userguide/tutorial_this_and_that.html#sec:gradle_properties_and_system_properties you can define environment variables (if I read it right) such as ORG_GRADLE_PROJECT_key=val which would be much less prone to misinterpretation than -Dkey=val command-line properties.

          Show
          jglick Jesse Glick added a comment - According to http://www.gradle.org/docs/current/userguide/tutorial_this_and_that.html#sec:gradle_properties_and_system_properties you can define environment variables (if I read it right) such as ORG_GRADLE_PROJECT_key=val which would be much less prone to misinterpretation than -Dkey=val command-line properties.
          Hide
          ndeloof Nicolas De Loof added a comment -

          I was able to reproduce this bug, running a windows jenkins and creating a gradle job with string parameter "<foo> <bar>"
          using debugger, I ended in java.lang.ProcessBuilder, that seems to be the root cause, by adding those single quotes but not escaping the square bracket characters

          maybe related to http://bugs.sun.com/view_bug.do?bug_id=6468220
          "
          On Windows platform Runtime.exec(String[] cmdarray) does not pass correctly command line arguments, if one of them contains double quotes (")
          "

          I'm not sure about the environment variable option Jesse suggested. Would like gradleware advice here

          Show
          ndeloof Nicolas De Loof added a comment - I was able to reproduce this bug, running a windows jenkins and creating a gradle job with string parameter "<foo> <bar>" using debugger, I ended in java.lang.ProcessBuilder, that seems to be the root cause, by adding those single quotes but not escaping the square bracket characters maybe related to http://bugs.sun.com/view_bug.do?bug_id=6468220 " On Windows platform Runtime.exec(String[] cmdarray) does not pass correctly command line arguments, if one of them contains double quotes (") " I'm not sure about the environment variable option Jesse suggested. Would like gradleware advice here
          Hide
          scm_issue_link SCM/JIRA link daemon added a comment -

          Code changed in jenkins
          User: Nicolas De Loof
          Path:
          src/main/java/hudson/plugins/gradle/Gradle.java
          http://jenkins-ci.org/commit/gradle-plugin/3ce68c23921a59b02d0159d9f7038941b88afada
          Log:
          [FIXED JENKINS-13412] use hudson.util.ArgumentListBuilder#toWindowsCommand


          You received this message because you are subscribed to the Google Groups "Jenkins Commits" group.
          To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-commits+unsubscribe@googlegroups.com.
          For more options, visit https://groups.google.com/groups/opt_out.

          Show
          scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Nicolas De Loof Path: src/main/java/hudson/plugins/gradle/Gradle.java http://jenkins-ci.org/commit/gradle-plugin/3ce68c23921a59b02d0159d9f7038941b88afada Log: [FIXED JENKINS-13412] use hudson.util.ArgumentListBuilder#toWindowsCommand – You received this message because you are subscribed to the Google Groups "Jenkins Commits" group. To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-commits+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out .

            People

            • Assignee:
              gbois Gregory Boissinot
              Reporter:
              danielbeck Daniel Beck
            • Votes:
              1 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: