Skip to content

Guard MetricNode.fromThinString against lines with fewer than 7 fields#3630

Open
vasiliy-mikhailov wants to merge 1 commit into
alibaba:1.8from
vasiliy-mikhailov:fix/metricnode-fromthinstring-bounds
Open

Guard MetricNode.fromThinString against lines with fewer than 7 fields#3630
vasiliy-mikhailov wants to merge 1 commit into
alibaba:1.8from
vasiliy-mikhailov:fix/metricnode-fromthinstring-bounds

Conversation

@vasiliy-mikhailov

@vasiliy-mikhailov vasiliy-mikhailov commented Jun 24, 2026

Copy link
Copy Markdown

Problem

MetricNode.fromThinString splits the line on | and then reads strs[0] through strs[6] unconditionally:

String[] strs = line.split("\\|");
node.setTimestamp(Long.parseLong(strs[0]));
...
node.setRt(Long.parseLong(strs[6]));
if (strs.length >= 8) {            // trailing fields are already guarded
    node.setOccupiedPassQps(Long.parseLong(strs[7]));
}

A line with fewer than seven fields (a short or truncated metric line) throws ArrayIndexOutOfBoundsException, even though the optional trailing fields are already protected with length checks.

Fix

Apply the same length guard to the leading fields, so a short line is parsed defensively (populating the fields that are present) instead of crashing — consistent with the existing handling of strs[7]/strs[8].

Test

Adds testFromThinStringShortInput to MetricNodeTest with a 3-field line. It fails on 1.8 (ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3) and passes with this change.

AI assistance disclosure

This contribution was produced with the help of an AI pipeline. The pipeline processed a large amount of source code to surface suspected bugs, reproduced a subset of them with failing unit tests and generated candidate fixes, and prepared pull requests from the ones that held up. Each PR was then reviewed and verified by a human before being opened: the fix and test were checked by hand and the test was confirmed to fail before the change and pass after.

fromThinString accessed strs[0] through strs[6] unconditionally, so a line
with fewer than seven pipe-separated fields threw
ArrayIndexOutOfBoundsException. The optional trailing fields (strs[7],
strs[8], ...) were already guarded with length checks; apply the same guard
to the leading fields so a short or truncated metric line is parsed
defensively instead of crashing.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant