Skip to content

Commit

Permalink
Fix crash with skipNull and uneven datasets (#10454)
Browse files Browse the repository at this point in the history
  • Loading branch information
kurkle committed Jun 29, 2022
1 parent 58e736a commit e3b2b52
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 21 deletions.
37 changes: 16 additions & 21 deletions src/controllers/controller.bar.js
Expand Up @@ -390,41 +390,36 @@ export default class BarController extends DatasetController {
* @private
*/
_getStacks(last, dataIndex) {
const meta = this._cachedMeta;
const iScale = meta.iScale;
const metasets = iScale.getMatchingVisibleMetas(this._type);
const {iScale} = this._cachedMeta;
const metasets = iScale.getMatchingVisibleMetas(this._type)
.filter(meta => meta.controller.options.grouped);
const stacked = iScale.options.stacked;
const ilen = metasets.length;
const stacks = [];
let i, item;

for (i = 0; i < ilen; ++i) {
item = metasets[i];
const skipNull = (meta) => {
const parsed = meta.controller.getParsed(dataIndex);
const val = parsed && parsed[meta.vScale.axis];

if (!item.controller.options.grouped) {
continue;
if (isNullOrUndef(val) || isNaN(val)) {
return true;
}
};

if (typeof dataIndex !== 'undefined') {
const val = item.controller.getParsed(dataIndex)[
item.controller._cachedMeta.vScale.axis
];

if (isNullOrUndef(val) || isNaN(val)) {
continue;
}
for (const meta of metasets) {
if (dataIndex !== undefined && skipNull(meta)) {
continue;
}

// stacked | meta.stack
// | found | not found | undefined
// false | x | x | x
// true | | x |
// undefined | | x | x
if (stacked === false || stacks.indexOf(item.stack) === -1 ||
(stacked === undefined && item.stack === undefined)) {
stacks.push(item.stack);
if (stacked === false || stacks.indexOf(meta.stack) === -1 ||
(stacked === undefined && meta.stack === undefined)) {
stacks.push(meta.stack);
}
if (item.index === last) {
if (meta.index === last) {
break;
}
}
Expand Down
20 changes: 20 additions & 0 deletions test/specs/controller.bar.tests.js
Expand Up @@ -1655,4 +1655,24 @@ describe('Chart.controllers.bar', function() {
expect(ctx.getCalls().filter(x => x.name === 'clip').length).toEqual(0);
});
});

it('should not crash with skipNull and uneven datasets', function() {
function unevenChart() {
window.acquireChart({
type: 'bar',
data: {
labels: [1, 2],
datasets: [
{data: [1, 2]},
{data: [1, 2, 3]},
]
},
options: {
skipNull: true,
}
});
}

expect(unevenChart).not.toThrow();
});
});

0 comments on commit e3b2b52

Please sign in to comment.