Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: content/renderer/pepper/pepper_audio_encoder_host.cc

Issue 2528243002: Fix silent truncations when extracting values from CheckedNumeric (Closed)
Patch Set: compile fix Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/pepper/pepper_audio_encoder_host.h" 5 #include "content/renderer/pepper/pepper_audio_encoder_host.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 333
334 return false; 334 return false;
335 } 335 }
336 336
337 bool PepperAudioEncoderHost::AllocateBuffers( 337 bool PepperAudioEncoderHost::AllocateBuffers(
338 const ppapi::proxy::PPB_AudioEncodeParameters& parameters, 338 const ppapi::proxy::PPB_AudioEncodeParameters& parameters,
339 int32_t samples_per_frame) { 339 int32_t samples_per_frame) {
340 DCHECK(RenderThreadImpl::current()); 340 DCHECK(RenderThreadImpl::current());
341 341
342 // Audio buffers size computation. 342 // Audio buffers size computation.
343 base::CheckedNumeric<size_t> audio_buffer_size = samples_per_frame; 343 base::CheckedNumeric<uint32_t> audio_buffer_size = samples_per_frame;
344 audio_buffer_size *= parameters.channels; 344 audio_buffer_size *= parameters.channels;
345 audio_buffer_size *= parameters.input_sample_size; 345 audio_buffer_size *= parameters.input_sample_size;
346 346
347 base::CheckedNumeric<size_t> total_audio_buffer_size = audio_buffer_size; 347 base::CheckedNumeric<uint32_t> total_audio_buffer_size = audio_buffer_size;
348 total_audio_buffer_size += sizeof(ppapi::MediaStreamBuffer::Audio); 348 total_audio_buffer_size += sizeof(ppapi::MediaStreamBuffer::Audio);
349 base::CheckedNumeric<size_t> total_audio_memory_size = 349 base::CheckedNumeric<size_t> total_audio_memory_size =
350 total_audio_buffer_size; 350 total_audio_buffer_size;
351 total_audio_memory_size *= kDefaultNumberOfAudioBuffers; 351 total_audio_memory_size *= kDefaultNumberOfAudioBuffers;
352 352
353 // Bitstream buffers size computation (individual bitstream buffers are 353 // Bitstream buffers size computation (individual bitstream buffers are
354 // twice the size of the raw data, to handle the worst case where 354 // twice the size of the raw data, to handle the worst case where
355 // compression doesn't work). 355 // compression doesn't work).
356 base::CheckedNumeric<size_t> bitstream_buffer_size = audio_buffer_size; 356 base::CheckedNumeric<uint32_t> bitstream_buffer_size = audio_buffer_size;
357 bitstream_buffer_size *= 2; 357 bitstream_buffer_size *= 2;
358 bitstream_buffer_size += sizeof(ppapi::MediaStreamBuffer::Bitstream); 358 bitstream_buffer_size += sizeof(ppapi::MediaStreamBuffer::Bitstream);
359 base::CheckedNumeric<size_t> total_bitstream_memory_size = 359 base::CheckedNumeric<size_t> total_bitstream_memory_size =
360 bitstream_buffer_size; 360 bitstream_buffer_size;
361 total_bitstream_memory_size *= kDefaultNumberOfAudioBuffers; 361 total_bitstream_memory_size *= kDefaultNumberOfAudioBuffers;
362 362
363 if (!total_audio_memory_size.IsValid() || 363 if (!total_audio_memory_size.IsValid() ||
364 !total_bitstream_memory_size.IsValid()) 364 !total_bitstream_memory_size.IsValid())
365 return false; 365 return false;
366 366
367 std::unique_ptr<base::SharedMemory> audio_memory( 367 std::unique_ptr<base::SharedMemory> audio_memory(
368 RenderThreadImpl::current()->HostAllocateSharedMemoryBuffer( 368 RenderThreadImpl::current()->HostAllocateSharedMemoryBuffer(
369 total_audio_memory_size.ValueOrDie())); 369 total_audio_memory_size.ValueOrDie()));
370 if (!audio_memory) 370 if (!audio_memory)
371 return false; 371 return false;
372 std::unique_ptr<ppapi::MediaStreamBufferManager> audio_buffer_manager( 372 std::unique_ptr<ppapi::MediaStreamBufferManager> audio_buffer_manager(
373 new ppapi::MediaStreamBufferManager(this)); 373 new ppapi::MediaStreamBufferManager(this));
374 if (!audio_buffer_manager->SetBuffers(kDefaultNumberOfAudioBuffers, 374 if (!audio_buffer_manager->SetBuffers(
375 total_audio_buffer_size.ValueOrDie(), 375 kDefaultNumberOfAudioBuffers,
376 std::move(audio_memory), false)) 376 base::ValueOrDieForType<int32_t>(total_audio_buffer_size),
377 std::move(audio_memory), false))
377 return false; 378 return false;
378 379
379 for (int32_t i = 0; i < audio_buffer_manager->number_of_buffers(); ++i) { 380 for (int32_t i = 0; i < audio_buffer_manager->number_of_buffers(); ++i) {
380 ppapi::MediaStreamBuffer::Audio* buffer = 381 ppapi::MediaStreamBuffer::Audio* buffer =
381 &(audio_buffer_manager->GetBufferPointer(i)->audio); 382 &(audio_buffer_manager->GetBufferPointer(i)->audio);
382 buffer->header.size = total_audio_buffer_size.ValueOrDie(); 383 buffer->header.size = total_audio_buffer_size.ValueOrDie();
383 buffer->header.type = ppapi::MediaStreamBuffer::TYPE_AUDIO; 384 buffer->header.type = ppapi::MediaStreamBuffer::TYPE_AUDIO;
384 buffer->sample_rate = 385 buffer->sample_rate =
385 static_cast<PP_AudioBuffer_SampleRate>(parameters.input_sample_rate); 386 static_cast<PP_AudioBuffer_SampleRate>(parameters.input_sample_rate);
386 buffer->number_of_channels = parameters.channels; 387 buffer->number_of_channels = parameters.channels;
387 buffer->number_of_samples = samples_per_frame; 388 buffer->number_of_samples = samples_per_frame;
388 buffer->data_size = audio_buffer_size.ValueOrDie(); 389 buffer->data_size = audio_buffer_size.ValueOrDie();
389 } 390 }
390 391
391 std::unique_ptr<base::SharedMemory> bitstream_memory( 392 std::unique_ptr<base::SharedMemory> bitstream_memory(
392 RenderThreadImpl::current()->HostAllocateSharedMemoryBuffer( 393 RenderThreadImpl::current()->HostAllocateSharedMemoryBuffer(
393 total_bitstream_memory_size.ValueOrDie())); 394 total_bitstream_memory_size.ValueOrDie()));
394 if (!bitstream_memory) 395 if (!bitstream_memory)
395 return false; 396 return false;
396 std::unique_ptr<ppapi::MediaStreamBufferManager> bitstream_buffer_manager( 397 std::unique_ptr<ppapi::MediaStreamBufferManager> bitstream_buffer_manager(
397 new ppapi::MediaStreamBufferManager(this)); 398 new ppapi::MediaStreamBufferManager(this));
398 if (!bitstream_buffer_manager->SetBuffers(kDefaultNumberOfAudioBuffers, 399 if (!bitstream_buffer_manager->SetBuffers(
399 bitstream_buffer_size.ValueOrDie(), 400 kDefaultNumberOfAudioBuffers,
400 std::move(bitstream_memory), true)) 401 base::ValueOrDieForType<int32_t>(bitstream_buffer_size),
402 std::move(bitstream_memory), true))
401 return false; 403 return false;
402 404
403 for (int32_t i = 0; i < bitstream_buffer_manager->number_of_buffers(); ++i) { 405 for (int32_t i = 0; i < bitstream_buffer_manager->number_of_buffers(); ++i) {
404 ppapi::MediaStreamBuffer::Bitstream* buffer = 406 ppapi::MediaStreamBuffer::Bitstream* buffer =
405 &(bitstream_buffer_manager->GetBufferPointer(i)->bitstream); 407 &(bitstream_buffer_manager->GetBufferPointer(i)->bitstream);
406 buffer->header.size = bitstream_buffer_size.ValueOrDie(); 408 buffer->header.size = bitstream_buffer_size.ValueOrDie();
407 buffer->header.type = ppapi::MediaStreamBuffer::TYPE_BITSTREAM; 409 buffer->header.type = ppapi::MediaStreamBuffer::TYPE_BITSTREAM;
408 } 410 }
409 411
410 audio_buffer_manager_.swap(audio_buffer_manager); 412 audio_buffer_manager_.swap(audio_buffer_manager);
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 } 495 }
494 496
495 // static 497 // static
496 void PepperAudioEncoderHost::StopAudioEncoder( 498 void PepperAudioEncoderHost::StopAudioEncoder(
497 std::unique_ptr<AudioEncoderImpl> encoder, 499 std::unique_ptr<AudioEncoderImpl> encoder,
498 std::unique_ptr<ppapi::MediaStreamBufferManager> audio_buffer_manager, 500 std::unique_ptr<ppapi::MediaStreamBufferManager> audio_buffer_manager,
499 std::unique_ptr<ppapi::MediaStreamBufferManager> bitstream_buffer_manager) { 501 std::unique_ptr<ppapi::MediaStreamBufferManager> bitstream_buffer_manager) {
500 } 502 }
501 503
502 } // namespace content 504 } // namespace content
OLDNEW
« no previous file with comments | « components/webcrypto/algorithms/aes_ctr.cc ('k') | content/renderer/pepper/pepper_media_stream_track_host_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698