Browse Source

Throw error when non-Buffer specified instead of crashing

Kevin Sawicki 8 years ago
parent
commit
6b7ec621e3
2 changed files with 13 additions and 3 deletions
  1. 7 3
      atom/common/api/atom_api_clipboard.cc
  2. 6 0
      spec/api-clipboard-spec.js

+ 7 - 3
atom/common/api/atom_api_clipboard.cc

@@ -53,13 +53,17 @@ v8::Local<v8::Value> Clipboard::ReadBuffer(const std::string& format_string,
       args->isolate(), data.data(), data.length()).ToLocalChecked();
 }
 
-void Clipboard::WriteBuffer(const std::string& format_string,
+void Clipboard::WriteBuffer(const std::string& format,
                             const v8::Local<v8::Value> buffer,
                             mate::Arguments* args) {
-  auto format = ui::Clipboard::GetFormatType(format_string);
+  if (!node::Buffer::HasInstance(buffer)) {
+    args->ThrowError("buffer must be a node Buffer");
+    return;
+  }
+
   ui::ScopedClipboardWriter writer(GetClipboardType(args));
   writer.WriteData(node::Buffer::Data(buffer), node::Buffer::Length(buffer),
-                   format);
+                   ui::Clipboard::GetFormatType(format));
 }
 
 void Clipboard::Write(const mate::Dictionary& data, mate::Arguments* args) {

+ 6 - 0
spec/api-clipboard-spec.js

@@ -109,6 +109,12 @@ describe('clipboard module', function () {
       clipboard.writeBuffer('public.utf8-plain-text', buffer)
       assert.equal(clipboard.readText(), 'writeBuffer')
     })
+
+    it('throws an error when a non-Buffer is specified', () => {
+      assert.throws(() => {
+        clipboard.writeBuffer('public.utf8-plain-text', 'hello')
+      }, /buffer must be a node Buffer/)
+    })
   })
 
   describe('clipboard.readBuffer(format)', function () {