| Index: mojo/system/data_pipe_consumer_dispatcher.cc
|
| diff --git a/mojo/system/data_pipe_consumer_dispatcher.cc b/mojo/system/data_pipe_consumer_dispatcher.cc
|
| index 07878f921318f9f15532ff2ad510f3cc9546c27c..af1605b5c4a7321b8a1db1bba9788f3724171f03 100644
|
| --- a/mojo/system/data_pipe_consumer_dispatcher.cc
|
| +++ b/mojo/system/data_pipe_consumer_dispatcher.cc
|
| @@ -44,21 +44,28 @@ MojoResult DataPipeConsumerDispatcher::ReadDataImplNoLock(
|
|
|
| if (!VerifyUserPointer<uint32_t>(num_bytes, 1))
|
| return MOJO_RESULT_INVALID_ARGUMENT;
|
| - // These flags are mutally exclusive.
|
| - if ((flags & MOJO_READ_DATA_FLAG_DISCARD) &&
|
| - (flags & MOJO_READ_DATA_FLAG_QUERY))
|
| - return MOJO_RESULT_INVALID_ARGUMENT;
|
| - if ((flags & MOJO_READ_DATA_FLAG_DISCARD) ||
|
| - (flags & MOJO_READ_DATA_FLAG_QUERY)) {
|
| - DVLOG_IF(2, elements) << "Discard/query mode: ignoring non-null |elements|";
|
| - elements = NULL; // Null it out for safety.
|
| - } else {
|
| - // Only verify |elements| if we're neither discarding nor querying.
|
| - if (!VerifyUserPointer<void>(elements, *num_bytes))
|
| +
|
| + if ((flags & MOJO_READ_DATA_FLAG_DISCARD)) {
|
| + // These flags are mutally exclusive.
|
| + if ((flags & MOJO_READ_DATA_FLAG_QUERY))
|
| return MOJO_RESULT_INVALID_ARGUMENT;
|
| + DVLOG_IF(2, elements) << "Discard mode: ignoring non-null |elements|";
|
| + return data_pipe_->ConsumerDiscardData(
|
| + num_bytes, (flags & MOJO_READ_DATA_FLAG_ALL_OR_NONE));
|
| }
|
|
|
| - return data_pipe_->ConsumerReadData(elements, num_bytes, flags);
|
| + if ((flags & MOJO_READ_DATA_FLAG_QUERY)) {
|
| + DCHECK(!(flags & MOJO_READ_DATA_FLAG_DISCARD)); // Handled above.
|
| + DVLOG_IF(2, elements) << "Query mode: ignoring non-null |elements|";
|
| + return data_pipe_->ConsumerQueryData(num_bytes);
|
| + }
|
| +
|
| + // Only verify |elements| if we're neither discarding nor querying.
|
| + if (!VerifyUserPointer<void>(elements, *num_bytes))
|
| + return MOJO_RESULT_INVALID_ARGUMENT;
|
| +
|
| + return data_pipe_->ConsumerReadData(
|
| + elements, num_bytes, (flags & MOJO_READ_DATA_FLAG_ALL_OR_NONE));
|
| }
|
|
|
| MojoResult DataPipeConsumerDispatcher::BeginReadDataImplNoLock(
|
| @@ -76,7 +83,8 @@ MojoResult DataPipeConsumerDispatcher::BeginReadDataImplNoLock(
|
| (flags & MOJO_READ_DATA_FLAG_QUERY))
|
| return MOJO_RESULT_INVALID_ARGUMENT;
|
|
|
| - return data_pipe_->ConsumerBeginReadData(buffer, buffer_num_bytes, flags);
|
| + return data_pipe_->ConsumerBeginReadData(
|
| + buffer, buffer_num_bytes, (flags & MOJO_READ_DATA_FLAG_ALL_OR_NONE));
|
| }
|
|
|
| MojoResult DataPipeConsumerDispatcher::EndReadDataImplNoLock(
|
|
|