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

Prototype 1.7 is missing the instance 'toJSON' method

    XMLWordPrintable

Details

    Description

      When the html5-notifier plugin is enabled, you cannot save a job with more than one build step. To reproduce, install the plugin and add a new job with two windows batch file or shell script build steps. If only one is created, it will save, but if two are created, you will see an error like the following:

      Failed to parse form data. Please report this problem as a bug
      JSON={"":"","builder":"\"[

      {\"command\":\"bar\",\"stapler-class\":\"hudson.tasks.Shell\",\"kind\":\"hudson.tasks.Shell\"}

      ,

      {\"command\":\"cd foo\",\"stapler-class\":\"hudson.tasks.Shell\",\"kind\":\"hudson.tasks.Shell\"}

      ]\"","description":"","hasSlaveAffinity":

      {"assignedLabelString":"windows&&expander"}

      ,"name":"debug_job2","properties":{"hudson-model-ParametersDefinitionProperty":{},"hudson-plugins-batch_task-BatchTaskProperty":{},"stapler-class-bag":"true"},"scm":{"value":"3"}}

      net.sf.json.JSONException: A JSONArray text must start with '[' at character 1 of "[

      {"command":"cd bar","stapler-class":"hudson.tasks.Shell","kind":"hudson.tasks.Shell"}

      ,

      {"command":"cd foo","stapler-class":"hudson.tasks.Shell","kind":"hudson.tasks.Shell"}

      ]"
      at net.sf.json.util.JSONTokener.syntaxError(JSONTokener.java:512)
      at net.sf.json.JSONArray._fromJSONTokener(JSONArray.java:903)
      at net.sf.json.JSONArray._fromString(JSONArray.java:983)
      at net.sf.json.JSONArray.fromObject(JSONArray.java:141)
      at net.sf.json.JSONArray.fromObject(JSONArray.java:120)
      at hudson.model.Descriptor.newInstancesFromHeteroList(Descriptor.java:863)
      at hudson.model.Descriptor.newInstancesFromHeteroList(Descriptor.java:853)
      at hudson.util.DescribableList.rebuildHetero(DescribableList.java:185)
      at hudson.model.Project.submit(Project.java:197)
      at hudson.model.Job.doConfigSubmit(Job.java:966)
      at hudson.model.AbstractProject.doConfigSubmit(AbstractProject.java:643)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:616)
      at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:282)
      at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:149)
      at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:88)
      at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:104)
      at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:561)
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:646)
      at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:234)
      at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:561)
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:646)
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:477)
      at org.kohsuke.stapler.Stapler.service(Stapler.java:159)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:45)
      at winstone.ServletConfiguration.execute(ServletConfiguration.java:249)
      at winstone.RequestDispatcher.forward(RequestDispatcher.java:335)
      at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:378)
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:95)
      at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:87)
      at winstone.FilterConfiguration.execute(FilterConfiguration.java:195)
      at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:368)
      at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:47)
      at winstone.FilterConfiguration.execute(FilterConfiguration.java:195)
      at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:368)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
      at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:166)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      at org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:173)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      at jenkins.security.ApiTokenFilter.doFilter(ApiTokenFilter.java:61)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
      at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:66)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
      at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)
      at winstone.FilterConfiguration.execute(FilterConfiguration.java:195)
      at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:368)
      at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)
      at winstone.FilterConfiguration.execute(FilterConfiguration.java:195)
      at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:368)
      at winstone.RequestDispatcher.forward(RequestDispatcher.java:333)
      at winstone.RequestHandlerThread.processRequest(RequestHandlerThread.java:244)
      at winstone.RequestHandlerThread.run(RequestHandlerThread.java:150)
      at java.lang.Thread.run(Thread.java:636)

      I think the problem is the \" at the start that's inserted there...

      Workaround is to uninstall the plugin.

      Attachments

        Issue Links

          Activity

            Code changed in jenkins
            User: Kohsuke Kawaguchi
            Path:
            war/src/main/webapp/scripts/prototype.js
            http://jenkins-ci.org/commit/jenkins/34e8117a64ce94a7e5da35be3bc3b077de16e1b2
            Log:
            JENKINS-11618 Adding back the 'toJSON' instance method.

            This change, in parallel to a fix in stapler bind.js, would maximize the
            backward compatibility.

            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Kohsuke Kawaguchi Path: war/src/main/webapp/scripts/prototype.js http://jenkins-ci.org/commit/jenkins/34e8117a64ce94a7e5da35be3bc3b077de16e1b2 Log: JENKINS-11618 Adding back the 'toJSON' instance method. This change, in parallel to a fix in stapler bind.js, would maximize the backward compatibility.
            dogfood dogfood added a comment -

            Integrated in jenkins_main_trunk #1554
            JENKINS-11618 backporting the fix here. (Revision 794cc76676863233f4dd1897c4b2ef7810a927bd)
            JENKINS-11618 Adding back the 'toJSON' instance method. (Revision 34e8117a64ce94a7e5da35be3bc3b077de16e1b2)

            Result = SUCCESS
            Kohsuke Kawaguchi : 794cc76676863233f4dd1897c4b2ef7810a927bd
            Files :

            • war/src/main/webapp/scripts/prototype.js

            Kohsuke Kawaguchi : 34e8117a64ce94a7e5da35be3bc3b077de16e1b2
            Files :

            • war/src/main/webapp/scripts/prototype.js
            dogfood dogfood added a comment - Integrated in jenkins_main_trunk #1554 JENKINS-11618 backporting the fix here. (Revision 794cc76676863233f4dd1897c4b2ef7810a927bd) JENKINS-11618 Adding back the 'toJSON' instance method. (Revision 34e8117a64ce94a7e5da35be3bc3b077de16e1b2) Result = SUCCESS Kohsuke Kawaguchi : 794cc76676863233f4dd1897c4b2ef7810a927bd Files : war/src/main/webapp/scripts/prototype.js Kohsuke Kawaguchi : 34e8117a64ce94a7e5da35be3bc3b077de16e1b2 Files : war/src/main/webapp/scripts/prototype.js

            FYI:
            As 1.454 was released to fix too restrictive HTML sanitization rules,
            1.455 will be the first version which bundles prototype 1.7.

            ohtake_tomohiro OHTAKE Tomohiro added a comment - FYI: As 1.454 was released to fix too restrictive HTML sanitization rules, 1.455 will be the first version which bundles prototype 1.7.

            JENKINS-13322 seems to relate to the use of prototype-1.7.js in this plugin.

            Any ideas? I tested on Jenkins 1.458.

            orrc Christopher Orr added a comment - JENKINS-13322 seems to relate to the use of prototype-1.7.js in this plugin. Any ideas? I tested on Jenkins 1.458.
            jieryn jieryn added a comment -

            Please try with the latest 1.2 version of the plugin (released today) and open a new defect if it recurs.

            jieryn jieryn added a comment - Please try with the latest 1.2 version of the plugin (released today) and open a new defect if it recurs.

            People

              jieryn jieryn
              djs Dan Savilonis
              Votes:
              3 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: