Browse Source

fix: don't crash when nativeImage.createFromBuffer() called with invalid buffer (#17374)

trop[bot] 6 years ago
parent
commit
c8f80baeea
2 changed files with 11 additions and 1 deletions
  1. 5 0
      atom/common/api/atom_api_native_image.cc
  2. 6 1
      spec/api-native-image-spec.js

+ 5 - 0
atom/common/api/atom_api_native_image.cc

@@ -509,6 +509,11 @@ mate::Handle<NativeImage> NativeImage::CreateFromPath(
 mate::Handle<NativeImage> NativeImage::CreateFromBuffer(
     mate::Arguments* args,
     v8::Local<v8::Value> buffer) {
+  if (!node::Buffer::HasInstance(buffer)) {
+    args->ThrowError("buffer must be a node Buffer");
+    return mate::Handle<NativeImage>();
+  }
+
   int width = 0;
   int height = 0;
   double scale_factor = 1.;

+ 6 - 1
spec/api-native-image-spec.js

@@ -127,7 +127,7 @@ describe('nativeImage module', () => {
     })
   })
 
-  describe('createFromBuffer(buffer, scaleFactor)', () => {
+  describe('createFromBuffer(buffer, options)', () => {
     it('returns an empty image when the buffer is empty', () => {
       expect(nativeImage.createFromBuffer(Buffer.from([])).isEmpty())
     })
@@ -165,6 +165,11 @@ describe('nativeImage module', () => {
         { width: 538, height: 190, scaleFactor: 2.0 })
       expect(imageI.getSize()).to.deep.equal({ width: 269, height: 95 })
     })
+
+    it('throws on invalid arguments', () => {
+      expect(() => nativeImage.createFromBuffer(null)).to.throw('buffer must be a node Buffer')
+      expect(() => nativeImage.createFromBuffer([12, 14, 124, 12])).to.throw('buffer must be a node Buffer')
+    })
   })
 
   describe('createFromDataURL(dataURL)', () => {