Index: webkit/plugins/ppapi/content_decryptor_delegate.cc |
diff --git a/webkit/plugins/ppapi/content_decryptor_delegate.cc b/webkit/plugins/ppapi/content_decryptor_delegate.cc |
index 84a58b651b8dec84fd451cb4200b828e366f967e..a3b1bf67f82c8bbcb7fe6bbe66319c775d38c62f 100644 |
--- a/webkit/plugins/ppapi/content_decryptor_delegate.cc |
+++ b/webkit/plugins/ppapi/content_decryptor_delegate.cc |
@@ -645,24 +645,37 @@ void ContentDecryptorDelegate::KeyMessage(PP_Var key_system_var, |
return; |
} |
- EnterResourceNoLock<PPB_Buffer_API> enter(message_resource, true); |
- if (!enter.succeeded()) { |
- decryptor_client_->KeyError(key_system_string->value(), |
- session_id_string->value(), |
- media::Decryptor::kUnknownError, |
- 0); |
- return; |
- } |
+ scoped_array<uint8> message_array; |
+ int message_size = 0; |
+ |
+ if (message_resource) { |
+ EnterResourceNoLock<PPB_Buffer_API> enter(message_resource, true); |
+ if (!enter.succeeded()) { |
+ decryptor_client_->KeyError(key_system_string->value(), |
+ session_id_string->value(), |
+ media::Decryptor::kUnknownError, |
+ 0); |
+ return; |
+ } |
- BufferAutoMapper mapper(enter.object()); |
- scoped_array<uint8> message_array(new uint8[mapper.size()]); |
- if (mapper.data() && mapper.size()) |
+ BufferAutoMapper mapper(enter.object()); |
+ if (!mapper.data() || !mapper.size()) { |
+ decryptor_client_->KeyError(key_system_string->value(), |
+ session_id_string->value(), |
+ media::Decryptor::kUnknownError, |
+ 0); |
+ return; |
+ } |
+ |
+ message_size = mapper.size(); |
+ message_array.reset(new uint8[message_size]); |
memcpy(message_array.get(), mapper.data(), mapper.size()); |
+ } |
decryptor_client_->KeyMessage(key_system_string->value(), |
session_id_string->value(), |
message_array.Pass(), |
- mapper.size(), |
+ message_size, |
default_url_string->value()); |
} |