| Index: net/quic/crypto/aead_base_encrypter_nss.cc
 | 
| diff --git a/net/quic/crypto/aead_base_encrypter_nss.cc b/net/quic/crypto/aead_base_encrypter_nss.cc
 | 
| index 1e408ad36f4b25dbda0e7e6242fd80acb5c4de72..ca2e2a9cca9d870de655c3b39f9aef7891c2c1e1 100644
 | 
| --- a/net/quic/crypto/aead_base_encrypter_nss.cc
 | 
| +++ b/net/quic/crypto/aead_base_encrypter_nss.cc
 | 
| @@ -110,27 +110,28 @@ bool AeadBaseEncrypter::Encrypt(StringPiece nonce,
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| -QuicData* AeadBaseEncrypter::EncryptPacket(
 | 
| -    QuicPacketSequenceNumber sequence_number,
 | 
| -    StringPiece associated_data,
 | 
| -    StringPiece plaintext) {
 | 
| +bool AeadBaseEncrypter::EncryptPacket(QuicPacketSequenceNumber sequence_number,
 | 
| +                                      StringPiece associated_data,
 | 
| +                                      StringPiece plaintext,
 | 
| +                                      char* output,
 | 
| +                                      size_t* output_length,
 | 
| +                                      size_t max_output_length) {
 | 
|    size_t ciphertext_size = GetCiphertextSize(plaintext.length());
 | 
| -  scoped_ptr<char[]> ciphertext(new char[ciphertext_size]);
 | 
| -
 | 
| +  if (max_output_length < ciphertext_size) {
 | 
| +    return false;
 | 
| +  }
 | 
|    // TODO(ianswett): Introduce a check to ensure that we don't encrypt with the
 | 
|    // same sequence number twice.
 | 
| -  uint8 nonce[sizeof(nonce_prefix_) + sizeof(sequence_number)];
 | 
|    const size_t nonce_size = nonce_prefix_size_ + sizeof(sequence_number);
 | 
| -  DCHECK_LE(nonce_size, sizeof(nonce));
 | 
| -  memcpy(nonce, nonce_prefix_, nonce_prefix_size_);
 | 
| -  memcpy(nonce + nonce_prefix_size_, &sequence_number, sizeof(sequence_number));
 | 
| -  if (!Encrypt(StringPiece(reinterpret_cast<char*>(nonce), nonce_size),
 | 
| -               associated_data, plaintext,
 | 
| -               reinterpret_cast<unsigned char*>(ciphertext.get()))) {
 | 
| -    return nullptr;
 | 
| +  memcpy(output, nonce_prefix_, nonce_prefix_size_);
 | 
| +  memcpy(output + nonce_prefix_size_, &sequence_number,
 | 
| +         sizeof(sequence_number));
 | 
| +  if (!Encrypt(StringPiece(output, nonce_size), associated_data, plaintext,
 | 
| +               reinterpret_cast<unsigned char*>(output))) {
 | 
| +    return false;
 | 
|    }
 | 
| -
 | 
| -  return new QuicData(ciphertext.release(), ciphertext_size, true);
 | 
| +  *output_length = ciphertext_size;
 | 
| +  return true;
 | 
|  }
 | 
|  
 | 
|  size_t AeadBaseEncrypter::GetKeySize() const { return key_size_; }
 | 
| 
 |