diff --git a/atom/common/api/atom_api_clipboard.cc b/atom/common/api/atom_api_clipboard.cc index 13cf36518242..430d8629379a 100644 --- a/atom/common/api/atom_api_clipboard.cc +++ b/atom/common/api/atom_api_clipboard.cc @@ -53,13 +53,17 @@ v8::Local 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 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) { diff --git a/spec/api-clipboard-spec.js b/spec/api-clipboard-spec.js index 136adc25e644..02ed3ea5f7a5 100644 --- a/spec/api-clipboard-spec.js +++ b/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 () {