From 7b6737a209712c65c8c49c0f451032f098ea1960 Mon Sep 17 00:00:00 2001 From: Takuya Uehara Date: Sat, 31 Oct 2020 21:10:17 +0900 Subject: [PATCH] Check index bounds of datasets for isDatasetVisible (#7986) * Check index bounds of datasets * Add test for isDatasetVisible --- src/core/core.controller.js | 7 ++++++- test/specs/core.controller.tests.js | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/core/core.controller.js b/src/core/core.controller.js index 18849bad5..20e097f3e 100644 --- a/src/core/core.controller.js +++ b/src/core/core.controller.js @@ -717,11 +717,16 @@ class Chart { } isDatasetVisible(datasetIndex) { + const dataset = this.data.datasets[datasetIndex]; + if (!dataset) { + return false; + } + const meta = this.getDatasetMeta(datasetIndex); // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false, // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned. - return typeof meta.hidden === 'boolean' ? !meta.hidden : !this.data.datasets[datasetIndex].hidden; + return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden; } setDatasetVisibility(datasetIndex, visible) { diff --git a/test/specs/core.controller.tests.js b/test/specs/core.controller.tests.js index 5d3a5202f..6192f9bdf 100644 --- a/test/specs/core.controller.tests.js +++ b/test/specs/core.controller.tests.js @@ -1493,6 +1493,22 @@ describe('Chart', function() { }); }); + describe('isDatasetVisible', function() { + it('should return false if index is out of bounds', function() { + var chart = acquireChart({ + type: 'line', + data: { + datasets: [{ + data: [0, 1, 2] + }], + labels: ['a', 'b', 'c'] + } + }); + + expect(chart.isDatasetVisible(1)).toBe(false); + }); + }); + describe('getChart', function() { it('should get the chart from the canvas ID', function() { var chart = acquireChart({ -- 2.47.2