From f94e8828ae025a1552c422975c571bcfbe715f1d Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Sat, 17 Apr 2021 00:14:55 +0300 Subject: [PATCH] Fix: don't draw segments out of bounds (#8911) --- src/elements/element.line.js | 12 ++++---- test/fixtures/controller.line/issue-8902.js | 30 +++++++++++++++++++ test/fixtures/controller.line/issue-8902.png | Bin 0 -> 19005 bytes 3 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 test/fixtures/controller.line/issue-8902.js create mode 100644 test/fixtures/controller.line/issue-8902.png diff --git a/src/elements/element.line.js b/src/elements/element.line.js index e6265a12822..985fa0b24e9 100644 --- a/src/elements/element.line.js +++ b/src/elements/element.line.js @@ -34,17 +34,19 @@ function getLineMethod(options) { return lineTo; } -function pathVars(points, segment, params) { - params = params || {}; +function pathVars(points, segment, params = {}) { const count = points.length; - const start = Math.max(params.start || 0, segment.start); - const end = Math.min(params.end || count - 1, segment.end); + const {start: paramsStart = 0, end: paramsEnd = count - 1} = params; + const {start: segmentStart, end: segmentEnd} = segment; + const start = Math.max(paramsStart, segmentStart); + const end = Math.min(paramsEnd, segmentEnd); + const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd; return { count, start, loop: segment.loop, - ilen: end < start ? count + end - start : end - start + ilen: end < start && !outside ? count + end - start : end - start }; } diff --git a/test/fixtures/controller.line/issue-8902.js b/test/fixtures/controller.line/issue-8902.js new file mode 100644 index 00000000000..cb986380708 --- /dev/null +++ b/test/fixtures/controller.line/issue-8902.js @@ -0,0 +1,30 @@ +module.exports = { + description: 'https://github.com/chartjs/Chart.js/issues/8902', + config: { + type: 'line', + data: { + labels: [1, 2, 3, 4, 5, 6, 7, 8], + datasets: [{ + data: [65, 59, NaN, 48, 56, 57, 40], + borderColor: 'rgb(75, 192, 192)', + }] + }, + options: { + plugins: false, + scales: { + x: { + type: 'linear', + min: 1, + max: 3 + } + } + } + }, + options: { + spriteText: true, + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.line/issue-8902.png b/test/fixtures/controller.line/issue-8902.png new file mode 100644 index 0000000000000000000000000000000000000000..c132c5793816f3ab935d23e07c922064eff84e82 GIT binary patch literal 19005 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 literal 0 HcmV?d00001