Index: base/clipboard.cc |
=================================================================== |
--- base/clipboard.cc (revision 12385) |
+++ base/clipboard.cc (working copy) |
@@ -6,6 +6,17 @@ |
#include "base/logging.h" |
+namespace { |
+ |
+// A compromised renderer could send us bad data, so validate it. |
+bool IsBitmapSafe(const Clipboard::ObjectMapParams& params) { |
+ const gfx::Size* size = reinterpret_cast<const gfx::Size*>(params[1].data()); |
+ return params[0].size() == |
+ static_cast<size_t>(size->width() * size->height() * 4); |
+} |
+ |
+} |
+ |
void Clipboard::DispatchObject(ObjectType type, const ObjectMapParams& params) { |
switch (type) { |
case CBF_TEXT: |
@@ -40,6 +51,8 @@ |
#if defined(OS_WIN) || defined(OS_LINUX) // This is just a stub on Linux |
case CBF_BITMAP: |
+ if (!IsBitmapSafe(params)) |
+ return; |
WriteBitmap(&(params[0].front()), &(params[1].front())); |
break; |
#endif // defined(OS_WIN) || defined(OS_LINUX) |