mirror of
https://github.com/chartjs/Chart.js.git
synced 2026-03-11 10:46:52 +01:00
[2.9] FitBoxes recursion when dimensions are NaN (#7853)
* Infinite recursion when dimensions are NaN Adding a verification on updateDims that handles a case when dimensions are both NaN. This caused an infinite recursion on fitBoxes when calculating the layout for a chart that is mounted on an element that is not yet in DOM. Fixes #7761
This commit is contained in:
committed by
GitHub
parent
2493cb5a2f
commit
063b7dc075
@@ -99,7 +99,8 @@ function updateDims(chartArea, params, layout) {
|
||||
chartArea.h = newHeight;
|
||||
|
||||
// return true if chart area changed in layout's direction
|
||||
return layout.horizontal ? newWidth !== chartArea.w : newHeight !== chartArea.h;
|
||||
var sizes = layout.horizontal ? [newWidth, chartArea.w] : [newHeight, chartArea.h];
|
||||
return sizes[0] !== sizes[1] && (!isNaN(sizes[0]) || !isNaN(sizes[1]));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -653,5 +653,45 @@ describe('Chart.layouts', function() {
|
||||
expect(yAxis.width).toBeCloseToPixel(33);
|
||||
expect(yAxis.ticks).toEqual(['2.5', '2.0', '1.5', '1.0', '0.5', '0']);
|
||||
});
|
||||
|
||||
it('should correctly handle NaN dimensions', function() {
|
||||
|
||||
// issue #7761: Maximum call stack size exceeded
|
||||
var chartContainer = document.createElement('div');
|
||||
chartContainer.style.width = '600px';
|
||||
chartContainer.style.height = '400px';
|
||||
|
||||
var chartCanvas = document.createElement('canvas');
|
||||
chartContainer.appendChild(chartCanvas);
|
||||
|
||||
var chart = new Chart(chartCanvas, {
|
||||
type: 'line',
|
||||
responsive: true,
|
||||
data: {
|
||||
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
|
||||
datasets: [{
|
||||
label: '# of Votes',
|
||||
data: [12, 19, 3, 5, 2, 3]
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
scales: {
|
||||
yAxes: [{
|
||||
type: 'linear',
|
||||
label: 'first axis',
|
||||
position: 'right'
|
||||
}, {
|
||||
type: 'linear',
|
||||
label: 'second axis',
|
||||
position: 'right'
|
||||
}]
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
expect(chart.width).toBeNaN();
|
||||
expect(chart.height).toBeNaN();
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user