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

Open Tasks Scanner throws java.nio.charset.UnmappableCharacterException

    • Icon: Bug Bug
    • Resolution: Not A Defect
    • Icon: Minor Minor
    • warnings-ng-plugin
    • None
    • Windows 10 VM, Jenkins 2.156, warnings-ng 1.0.0

      Since migrating to warnings-ng 1.0.0, open task scanner throws "java.nio.charset.UnmappableCharacterException" on a handful of files that the old open tasks plugin could read in without complaint.
      Some of the files in question are UTF-8 with BOM, some without. The Delphi IDE saves them as UTF-8 with BOM automatically when the file contains unicode characters.

      The attached files (with and without BOM) display fine in the Delphi IDE, VS Code and Notepad++.

      {{[Open Tasks Scanner] [ERROR] Exception while reading the source code file 'F:\Jenkins\workspace_Test - Migration - Warnings NG\McdLib\RAC.CharacterConsts.pas':
      [Open Tasks Scanner] [ERROR] java.nio.charset.UnmappableCharacterException: Input length = 1
      [Open Tasks Scanner] [ERROR] at java.nio.charset.CoderResult.throwException(Unknown Source)
      [Open Tasks Scanner] [ERROR] at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
      [Open Tasks Scanner] [ERROR] at sun.nio.cs.StreamDecoder.read(Unknown Source)
      [Open Tasks Scanner] [ERROR] at java.io.InputStreamReader.read(Unknown Source)
      [Open Tasks Scanner] [ERROR] at java.io.BufferedReader.fill(Unknown Source)
      [Open Tasks Scanner] [ERROR] at java.io.BufferedReader.readLine(Unknown Source)
      [Open Tasks Scanner] [ERROR] at java.io.BufferedReader.readLine(Unknown Source)
      [Open Tasks Scanner] [ERROR] [wrapped] java.io.UncheckedIOException: java.nio.charset.UnmappableCharacterException: Input length = 1
      [Open Tasks Scanner] [ERROR] at java.io.BufferedReader$1.hasNext(Unknown Source)
      [Open Tasks Scanner] [ERROR] at java.util.Spliterators$IteratorSpliterator.tryAdvance(Unknown Source)
      [Open Tasks Scanner] [ERROR] at java.util.Spliterators$1Adapter.hasNext(Unknown Source)
      [Open Tasks Scanner] [ERROR] at io.jenkins.plugins.analysis.warnings.tasks.TaskScanner.scanTasks(TaskScanner.java:231)
      [Open Tasks Scanner] [ERROR] at io.jenkins.plugins.analysis.warnings.tasks.TaskScanner.scan(TaskScanner.java:197)
      [Open Tasks Scanner] [ERROR] at io.jenkins.plugins.analysis.warnings.tasks.AgentScanner.invoke(AgentScanner.java:91)
      [Open Tasks Scanner] [ERROR] at io.jenkins.plugins.analysis.warnings.tasks.AgentScanner.invoke(AgentScanner.java:28)
      [Open Tasks Scanner] [ERROR] at hudson.FilePath.act(FilePath.java:1078)
      [Open Tasks Scanner] [ERROR] at hudson.FilePath.act(FilePath.java:1061)
      [Open Tasks Scanner] [ERROR] at io.jenkins.plugins.analysis.warnings.tasks.OpenTasks.scan(OpenTasks.java:159)
      [Open Tasks Scanner] [ERROR] at io.jenkins.plugins.analysis.core.steps.IssuesScanner.scan(IssuesScanner.java:64)
      [Open Tasks Scanner] [ERROR] at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.scanWithTool(IssuesRecorder.java:654)
      [Open Tasks Scanner] [ERROR] at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.record(IssuesRecorder.java:622)
      [Open Tasks Scanner] [ERROR] at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.perform(IssuesRecorder.java:597)
      [Open Tasks Scanner] [ERROR] at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:80)
      [Open Tasks Scanner] [ERROR] at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:67)
      [Open Tasks Scanner] [ERROR] at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1$1.call(SynchronousNonBlockingStepExecution.java:51)
      [Open Tasks Scanner] [ERROR] at hudson.security.ACL.impersonate(ACL.java:290)
      [Open Tasks Scanner] [ERROR] at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1.run(SynchronousNonBlockingStepExecution.java:48)
      [Open Tasks Scanner] [ERROR] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
      [Open Tasks Scanner] [ERROR] at java.util.concurrent.FutureTask.run(Unknown Source)
      [Open Tasks Scanner] [ERROR] at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
      [Open Tasks Scanner] [ERROR] at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
      [Open Tasks Scanner] [ERROR] at java.lang.Thread.run(Unknown Source)
      }}

          [JENKINS-55350] Open Tasks Scanner throws java.nio.charset.UnmappableCharacterException

          Lübbe Onken created issue -

          Ulli Hafner added a comment -

          I added a test case with your files that actually passes. What sourceCodeEncoding did you specify? I also improved logging so you will see the encoding that has been actually used. This will be part of the next release, I let you know if it is finished.

          Ulli Hafner added a comment - I added a test case with your files that actually passes. What sourceCodeEncoding did you specify? I also improved logging so you will see the encoding that has been actually used. This will be part of the next release, I let you know if it is finished.

          Lübbe Onken added a comment - - edited

          Hi Ulli,
          sorry for the late reply. I was away from my work computer for a week. The following code snippet is used in my scripted pipeline.

          Sorry, Jira and I are not becoming friends when preformatted text is concerned
          {{ // Collect open tasks
          recordIssues(
          enabledForFailure: true,
          failedNewHigh: 0,
          tools: [
          taskScanner(
          includePattern: '*/.pas, */.dpr',
          excludePattern: 'Packages/**',
          ignoreCase: true,
          isRegularExpression: true,
          sourceCodeEncoding: 'UTF-8',
          highTags: '(?i)^.(?://|\\{|\\(\\*)\\s(FIXME)(?:
          s|:|-)+(.*)$',
          normalTags: '(?i)^.(?://|\\{|\\(\\*)\\s(TODO)(?:
          s|:|-)+(.*)$',
          lowTags: '(?i)^.(?://|\\{|\\(\\*)
          s
          (##[A-Z]

          {2}

          )(?:
          s|:|-)+(.*)$'
          )
          ]
          )
          }}

          Lübbe Onken added a comment - - edited Hi Ulli, sorry for the late reply. I was away from my work computer for a week. The following code snippet is used in my scripted pipeline. Sorry, Jira and I are not becoming friends when preformatted text is concerned {{ // Collect open tasks recordIssues( enabledForFailure: true, failedNewHigh: 0, tools: [ taskScanner( includePattern: '* / .pas, * / .dpr', excludePattern: 'Packages/**', ignoreCase: true, isRegularExpression: true, sourceCodeEncoding: 'UTF-8', highTags: '(?i)^. (?://|\\{|\\(\\*)\\s (FIXME)(?: s|:|-)+(.*)$', normalTags: '(?i)^. (?://|\\{|\\(\\*)\\s (TODO)(?: s|:|-)+(.*)$', lowTags: '(?i)^. (?://|\\{|\\(\\*) s (## [A-Z] {2} )(?: s|:|-)+(.*)$' ) ] ) }}
          Lübbe Onken made changes -
          Comment [ Can't get the formatting right without the content being screwed up, so here it is again

                          // Collect open tasks
                          recordIssues(
                              enabledForFailure: true,
                              failedNewHigh: 0,
                              tools: [
                                  taskScanner(
                                      includePattern: '**/*.pas, **/*.dpr',
                                      excludePattern: 'Packages/**',
                                      ignoreCase: true,
                                      isRegularExpression: true,
                                      sourceCodeEncoding: 'UTF-8',
                                      highTags: '(?i)^.*(?://|\\{|\\(\\*)\\s*(FIXME)(?:\\s|:|-)+(.*)$',
                                      normalTags: '(?i)^.*(?://|\\{|\\(\\*)\\s*(TODO)(?:\\s|:|-)+(.*)$',
                                      lowTags: '(?i)^.*(?://|\\{|\\(\\*)\\s*(##[A-Z]{2})(?:\\s|:|-)+(.*)$'
                                  )
                              ]
                          )
          ]
          Lübbe Onken made changes -
          Comment [ {{ // Collect open tasks
                          recordIssues(
                              enabledForFailure: true,
                              failedNewHigh: 0,
                              tools: [
                                  taskScanner(
                                      includePattern: '**/*.pas, **/*.dpr',
                                      excludePattern: 'Packages/**',
                                      ignoreCase: true,
                                      isRegularExpression: true,
                                      sourceCodeEncoding: 'UTF-8',
                                      highTags: '(?i)^.*(?://|\\{|\\(\\*)\\s*(FIXME)(?:\\s|:|-)+(.*)$',
                                      normalTags: '(?i)^.*(?://|\\{|\\(\\*)\\s*(TODO)(?:\\s|:|-)+(.*)$',
                                      lowTags: '(?i)^.*(?://|\\{|\\(\\*)\\s*(##[A-Z]{2})(?:\\s|:|-)+(.*)$'
                                  )
                              ]
                          )
          }} ]

          Lübbe Onken added a comment -

          The BOM definitely survived the journey to github. I wonder where the problem lies.

          Lübbe Onken added a comment - The BOM definitely survived the journey to github. I wonder where the problem lies.

          Ulli Hafner added a comment -

          You can wrap your code into a {noformat} block.

          Ulli Hafner added a comment - You can wrap your code into a {noformat} block.

          Ulli Hafner added a comment -

          I added some additional logging, however I still need some time for the next release. Hopefully, we can track it afterwards...

          Ulli Hafner added a comment - I added some additional logging, however I still need some time for the next release. Hopefully, we can track it afterwards...
          Ulli Hafner made changes -
          Rank New: Ranked higher
          Ulli Hafner made changes -
          Rank New: Ranked higher

            drulli Ulli Hafner
            luebbe Lübbe Onken
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: