From acf5d487d28b78aaf81929e5fc46262244b4b63e Mon Sep 17 00:00:00 2001 From: John Kleinschmidt Date: Thu, 10 Sep 2020 14:42:41 -0400 Subject: [PATCH] fix: crash on nativeImage on Windows on ARM (#25396) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: nativeImage on WOA * Remove old ldflag * maybe this will work ¯\_(ツ)_/¯ --- BUILD.gn | 5 +++++ spec/api-native-image-spec.js | 17 ++++------------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index 6b538e1432b8..cee6e59ea792 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -1154,6 +1154,11 @@ if (is_mac) { "/DELAYLOAD:api-ms-win-core-winrt-string-l1-1-0.dll", ] + if (target_cpu == "arm64") { + configs -= [ "//build/config/win:cfi_linker" ] + ldflags += [ "/guard:cf,nolongjmp" ] + } + # This is to support renaming of electron.exe. node-gyp has hard-coded # executable names which it will recognise as node. This module definition # file claims that the electron executable is in fact named "node.exe", diff --git a/spec/api-native-image-spec.js b/spec/api-native-image-spec.js index dbc1d047a44a..353bb5d629bd 100644 --- a/spec/api-native-image-spec.js +++ b/spec/api-native-image-spec.js @@ -173,13 +173,7 @@ describe('nativeImage module', () => { const imageB = nativeImage.createFromBitmap(imageA.toBitmap(), imageA.getSize()); expect(imageB.getSize()).to.deep.equal({ width: 538, height: 190 }); - let imageC; - // TODO fix nativeImage.createFromBuffer from bitmaps on WOA. See https://github.com/electron/electron/issues/25069 - if (process.platform === 'win32' && process.arch === 'arm64') { - imageC = nativeImage.createFromBuffer(imageA.toPNG(), { ...imageA.getSize(), scaleFactor: 2.0 }); - } else { - imageC = nativeImage.createFromBuffer(imageA.toBitmap(), { ...imageA.getSize(), scaleFactor: 2.0 }); - } + const imageC = nativeImage.createFromBuffer(imageA.toBitmap(), { ...imageA.getSize(), scaleFactor: 2.0 }); expect(imageC.getSize()).to.deep.equal({ width: 269, height: 95 }); }); @@ -192,8 +186,7 @@ describe('nativeImage module', () => { }); }); - // TODO fix nativeImage.createFromBuffer on WOA. See https://github.com/electron/electron/issues/25069 - ifdescribe(!(process.platform === 'win32' && process.arch === 'arm64'))('createFromBuffer(buffer, options)', () => { + describe('createFromBuffer(buffer, options)', () => { it('returns an empty image when the buffer is empty', () => { expect(nativeImage.createFromBuffer(Buffer.from([])).isEmpty()).to.be.true(); }); @@ -347,8 +340,7 @@ describe('nativeImage module', () => { }); describe('createFromPath(path)', () => { - // TODO fix nativeImage.createFromPath on WOA. See https://github.com/electron/electron/issues/25069 - ifit(!(process.platform === 'win32' && process.arch === 'arm64'))('returns an empty image for invalid paths', () => { + it('returns an empty image for invalid paths', () => { expect(nativeImage.createFromPath('').isEmpty()).to.be.true(); expect(nativeImage.createFromPath('does-not-exist.png').isEmpty()).to.be.true(); expect(nativeImage.createFromPath('does-not-exist.ico').isEmpty()).to.be.true(); @@ -520,8 +512,7 @@ describe('nativeImage module', () => { }); describe('addRepresentation()', () => { - // TODO fix nativeImage.createFromBuffer on WOA. See https://github.com/electron/electron/issues/25069 - ifit(!(process.platform === 'win32' && process.arch === 'arm64'))('does not add representation when the buffer is too small', () => { + it('does not add representation when the buffer is too small', () => { const image = nativeImage.createEmpty(); image.addRepresentation({