Skip to content

[JENKINS-75929] StringIndexOutOfBoundsException on timestamp only line #511

@jenkins-infra-bot

Description

@jenkins-infra-bot

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);

Originally reported by jenkins8, imported from: StringIndexOutOfBoundsException on timestamp only line
  • status: Open
  • priority: Minor
  • component(s): timestamper-plugin
  • resolution: Unresolved
  • votes: 0
  • watchers: 2
  • imported: 20251218-075729
Raw content of original issue

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);
  • environment: timestamper 1.30

Metadata

Metadata

Assignees

No one assigned

    Type

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions