summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortomfinegan@chromium.org <tomfinegan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-14 02:35:37 +0000
committertomfinegan@chromium.org <tomfinegan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-14 02:35:37 +0000
commit5b9d6c34051ad68bef7a859af2db8a7f60968277 (patch)
tree29e9036d6a192a3c789ce65716d34b62cc538490
parent80b559c19958db9bdb36d993941670a1db809dd1 (diff)
downloadchromium_src-5b9d6c34051ad68bef7a859af2db8a7f60968277.zip
chromium_src-5b9d6c34051ad68bef7a859af2db8a7f60968277.tar.gz
chromium_src-5b9d6c34051ad68bef7a859af2db8a7f60968277.tar.bz2
Fix crash in CdmWrapper::Decrypt when there are no sub samples.
When PP_EncryptedBlockInfo has a num_subsamples of 0, CdmWrapper::Decrypt triggers a _DEBUG_ERROR in c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\vector. The Windows std::vector doesn't appear to like it much when you call operator[] on empty vectors. BUG=none TEST=CdmWrapper::Decrypt does not crash on Windows when PP_EncryptedBlockInfo has no sub samples. Review URL: https://chromiumcodereview.appspot.com/10909199 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@156718 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--webkit/media/crypto/ppapi/cdm_wrapper.cc17
1 files changed, 12 insertions, 5 deletions
diff --git a/webkit/media/crypto/ppapi/cdm_wrapper.cc b/webkit/media/crypto/ppapi/cdm_wrapper.cc
index 8a8cb37..9098065 100644
--- a/webkit/media/crypto/ppapi/cdm_wrapper.cc
+++ b/webkit/media/crypto/ppapi/cdm_wrapper.cc
@@ -208,13 +208,20 @@ void CdmWrapper::Decrypt(pp::Buffer_Dev encrypted_buffer,
input_buffer.checksum = encrypted_block_info.checksum;
input_buffer.checksum_size = encrypted_block_info.checksum_size;
input_buffer.num_subsamples = encrypted_block_info.num_subsamples;
+
std::vector<cdm::SubsampleEntry> subsamples;
- for (uint32_t i = 0; i < encrypted_block_info.num_subsamples; ++i) {
- subsamples.push_back(cdm::SubsampleEntry(
- encrypted_block_info.subsamples[i].clear_bytes,
- encrypted_block_info.subsamples[i].cipher_bytes));
+ if (encrypted_block_info.num_subsamples > 0) {
+ subsamples.reserve(encrypted_block_info.num_subsamples);
+
+ for (uint32_t i = 0; i < encrypted_block_info.num_subsamples; ++i) {
+ subsamples.push_back(cdm::SubsampleEntry(
+ encrypted_block_info.subsamples[i].clear_bytes,
+ encrypted_block_info.subsamples[i].cipher_bytes));
+ }
+
+ input_buffer.subsamples = &subsamples[0];
}
- input_buffer.subsamples = &subsamples[0];
+
input_buffer.timestamp = encrypted_block_info.tracking_info.timestamp;
cdm::OutputBuffer output_buffer;