fix: validate printToPDF
margins
against pageSize
(#41157)
fix: validate margins against pageSize
This commit is contained in:
parent
85bebfb180
commit
6df3443617
2 changed files with 25 additions and 1 deletions
|
@ -220,6 +220,16 @@ function parsePageSize (pageSize: string | ElectronInternal.PageSize) {
|
|||
let pendingPromise: Promise<any> | undefined;
|
||||
WebContents.prototype.printToPDF = async function (options) {
|
||||
const margins = checkType(options.margins ?? {}, 'object', 'margins');
|
||||
const pageSize = parsePageSize(options.pageSize ?? 'letter');
|
||||
|
||||
const { top, bottom, left, right } = margins;
|
||||
const validHeight = [top, bottom].every(u => u === undefined || u <= pageSize.paperHeight);
|
||||
const validWidth = [left, right].every(u => u === undefined || u <= pageSize.paperWidth);
|
||||
|
||||
if (!validHeight || !validWidth) {
|
||||
throw new Error('margins must be less than or equal to pageSize');
|
||||
}
|
||||
|
||||
const printSettings = {
|
||||
requestID: getNextId(),
|
||||
landscape: checkType(options.landscape ?? false, 'boolean', 'landscape'),
|
||||
|
@ -236,7 +246,7 @@ WebContents.prototype.printToPDF = async function (options) {
|
|||
preferCSSPageSize: checkType(options.preferCSSPageSize ?? false, 'boolean', 'preferCSSPageSize'),
|
||||
generateTaggedPDF: checkType(options.generateTaggedPDF ?? false, 'boolean', 'generateTaggedPDF'),
|
||||
generateDocumentOutline: checkType(options.generateDocumentOutline ?? false, 'boolean', 'generateDocumentOutline'),
|
||||
...parsePageSize(options.pageSize ?? 'letter')
|
||||
...pageSize
|
||||
};
|
||||
|
||||
if (this._printToPDF) {
|
||||
|
|
|
@ -2053,6 +2053,20 @@ describe('webContents module', () => {
|
|||
}
|
||||
});
|
||||
|
||||
it('rejects when margins exceed physical page size', async () => {
|
||||
await w.loadURL('data:text/html,<h1>Hello, World!</h1>');
|
||||
|
||||
await expect(w.webContents.printToPDF({
|
||||
pageSize: 'Letter',
|
||||
margins: {
|
||||
top: 100,
|
||||
bottom: 100,
|
||||
left: 5,
|
||||
right: 5
|
||||
}
|
||||
})).to.eventually.be.rejectedWith('margins must be less than or equal to pageSize');
|
||||
});
|
||||
|
||||
it('does not crash when called multiple times in parallel', async () => {
|
||||
await w.loadURL('data:text/html,<h1>Hello, World!</h1>');
|
||||
|
||||
|
|
Loading…
Reference in a new issue