From: Jukka Kurkela Date: Wed, 5 May 2021 11:49:44 +0000 (+0300) Subject: Fix: Avoid negative layout dimensions (#9027) X-Git-Tag: v3.3.0~30 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1a1e677699f7b466c970529bbb988dde81f0ad9c;p=thirdparty%2FChart.js.git Fix: Avoid negative layout dimensions (#9027) --- diff --git a/src/core/core.layouts.js b/src/core/core.layouts.js index dfd0dd31b..e0069fe2e 100644 --- a/src/core/core.layouts.js +++ b/src/core/core.layouts.js @@ -309,8 +309,8 @@ export default { } const padding = toPadding(chart.options.layout.padding); - const availableWidth = width - padding.width; - const availableHeight = height - padding.height; + const availableWidth = Math.max(width - padding.width, 0); + const availableHeight = Math.max(height - padding.height, 0); const boxes = buildLayoutBoxes(chart.boxes); const verticalBoxes = boxes.vertical; const horizontalBoxes = boxes.horizontal; diff --git a/test/specs/scale.linear.tests.js b/test/specs/scale.linear.tests.js index 9ff00e724..c523afea9 100644 --- a/test/specs/scale.linear.tests.js +++ b/test/specs/scale.linear.tests.js @@ -1220,4 +1220,31 @@ describe('Linear Scale', function() { expect(scale.getValueForPixel(end)).toBeCloseTo(min, 4); expect(scale.getValueForPixel(start)).toBeCloseTo(max, 4); }); + + it('should not throw errors when chart size is negative', function() { + function createChart() { + return window.acquireChart({ + type: 'bar', + data: { + labels: [0, 1, 2, 3, 4, 5, 6, 7, '7+'], + datasets: [{ + data: [29.05, 4, 15.69, 11.69, 2.84, 4, 0, 3.84, 4], + }], + }, + options: { + plugins: false, + layout: { + padding: {top: 30, left: 1, right: 1, bottom: 1} + } + } + }, { + canvas: { + height: 0, + width: 0 + } + }); + } + + expect(createChart).not.toThrow(); + }); });