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

StringIndexOutOfBoundsException on timestamp only line

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Minor Minor
    • timestamper-plugin
    • None
    • timestamper 1.30

      There was a line in our console output with timestamp only (and no whitespace after)

      [2025-07-23T16:46:19.778Z]
      

      This caused StringIndexOutOfBoundsException

      10:22:52  Also:   org.jenkinsci.plugins.workflow.actions.ErrorAction$ErrorId: 0f98af8e-a673-4ce3-a230-58c082ac2516
      10:22:52  java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 26
      10:22:52       at java.base/jdk.internal.util.Preconditions$1.apply(Unknown Source)
      10:22:52       at java.base/jdk.internal.util.Preconditions$1.apply(Unknown Source)
      10:22:52       at java.base/jdk.internal.util.Preconditions$4.apply(Unknown Source)
      10:22:52       at java.base/jdk.internal.util.Preconditions$4.apply(Unknown Source)
      10:22:52       at java.base/jdk.internal.util.Preconditions.outOfBounds(Unknown Source)
      10:22:52       at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Unknown Source)
      10:22:52       at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Unknown Source)
      10:22:52       at java.base/java.lang.String.checkBoundsBeginEnd(Unknown Source)
      10:22:52       at java.base/java.lang.String.substring(Unknown Source)
      10:22:52       at java.base/java.lang.String.substring(Unknown Source)
      10:22:52       at PluginClassLoader for timestamper//hudson.plugins.timestamper.accessor.TimestampLogFileLineAccessor.readLine(TimestampLogFileLineAccessor.java:108)
      10:22:52       at PluginClassLoader for timestamper//hudson.plugins.timestamper.action.TimestampsActionOutput$1.readNextLine(TimestampsActionOutput.java:156)
      10:22:52       at PluginClassLoader for timestamper//hudson.plugins.timestamper.action.TimestampsActionOutput$1.read(TimestampsActionOutput.java:119)
      10:22:52       at java.base/java.io.BufferedReader.fill(Unknown Source)
      10:22:52       at java.base/java.io.BufferedReader.implReadLine(Unknown Source)
      10:22:52       at java.base/java.io.BufferedReader.readLine(Unknown Source)
      10:22:52       at java.base/java.io.BufferedReader.readLine(Unknown Source)
      10:22:52       at PluginClassLoader for log-parser//hudson.plugins.logparser.LogParserParser.parseLogBody(LogParserParser.java:366)
      10:22:52       at PluginClassLoader for log-parser//hudson.plugins.logparser.LogParserParser.parseLog(LogParserParser.java:161)
      10:22:52       at PluginClassLoader for log-parser//hudson.plugins.logparser.LogParserPublisher.perform(LogParserPublisher.java:120)
      10:22:52       at jenkins.tasks.SimpleBuildStep.perform(SimpleBuildStep.java:123)
      10:22:52       at PluginClassLoader for workflow-basic-steps//org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:101)
      10:22:52       at PluginClassLoader for workflow-basic-steps//org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:71)
      10:22:52       at PluginClassLoader for workflow-step-api//org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:49)
      10:22:52       at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
      10:22:52       at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
      10:22:52       at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
      10:22:52       at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
      10:22:52       at java.base/java.lang.Thread.run(Unknown Source)
      

      Code expected string of length 27 or more
      https://github.com/jenkinsci/timestamper-plugin/blob/master/src/main/java/hudson/plugins/timestamper/accessor/TimestampLogFileLineAccessor.java#L108

      103:            timestamp = GlobalAnnotator.parseTimestamp(logFileLine, build.getStartTimeInMillis())
      104:                    .orElse(null);
      105:            if (timestamp != null) {
      106:                // If we succeeded, then the log file was decorated by GlobalDecorator. Strip the
      107:                // timestamp decoration from the front of the line.
      108:                logFileLine = logFileLine.substring(27);
      

            Unassigned Unassigned
            jenkins8 Sugi
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: