| Index: mojo/public/cpp/bindings/lib/message.cc
 | 
| diff --git a/mojo/public/cpp/bindings/lib/message.cc b/mojo/public/cpp/bindings/lib/message.cc
 | 
| index e5f38081176f5843c59669fcd5ba64b001cc2383..50d6d6758014d65465d55e4a6d30760377ab5d0f 100644
 | 
| --- a/mojo/public/cpp/bindings/lib/message.cc
 | 
| +++ b/mojo/public/cpp/bindings/lib/message.cc
 | 
| @@ -80,6 +80,7 @@ const uint8_t* Message::payload() const {
 | 
|    if (version() < 2)
 | 
|      return data() + header()->num_bytes;
 | 
|  
 | 
| +  DCHECK(!header_v2()->payload.is_null());
 | 
|    return static_cast<const uint8_t*>(header_v2()->payload.Get());
 | 
|  }
 | 
|  
 | 
| @@ -89,17 +90,14 @@ uint32_t Message::payload_num_bytes() const {
 | 
|    if (version() < 2) {
 | 
|      num_bytes = data_num_bytes() - header()->num_bytes;
 | 
|    } else {
 | 
| -    auto payload = reinterpret_cast<uintptr_t>(header_v2()->payload.Get());
 | 
| -    if (!payload) {
 | 
| -      num_bytes = 0;
 | 
| -    } else {
 | 
| -      auto payload_end =
 | 
| -          reinterpret_cast<uintptr_t>(header_v2()->payload_interface_ids.Get());
 | 
| -      if (!payload_end)
 | 
| -        payload_end = reinterpret_cast<uintptr_t>(data() + data_num_bytes());
 | 
| -      DCHECK_GE(payload_end, payload);
 | 
| -      num_bytes = payload_end - payload;
 | 
| -    }
 | 
| +    auto payload_begin =
 | 
| +        reinterpret_cast<uintptr_t>(header_v2()->payload.Get());
 | 
| +    auto payload_end =
 | 
| +        reinterpret_cast<uintptr_t>(header_v2()->payload_interface_ids.Get());
 | 
| +    if (!payload_end)
 | 
| +      payload_end = reinterpret_cast<uintptr_t>(data() + data_num_bytes());
 | 
| +    DCHECK_GE(payload_end, payload_begin);
 | 
| +    num_bytes = payload_end - payload_begin;
 | 
|    }
 | 
|    DCHECK_LE(num_bytes, std::numeric_limits<uint32_t>::max());
 | 
|    return static_cast<uint32_t>(num_bytes);
 | 
| 
 |