Add templated version of ByteBufferWriter.
This CL switches to a Buffer for storing the data and allows using
a different class, e.g. "ZeroOnFreeBuffer" for sensitive data.
Bug: webrtc:8905
Change-Id: Ic56f3f51cc6d640135c4ee0e1ad0fd48d27bbbdf
Reviewed-on: https://webrtc-review.googlesource.com/60660
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Joachim Bauch <jbauch@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22354}
diff --git a/rtc_base/socketadapters.cc b/rtc_base/socketadapters.cc
index 5b95cac..a300495 100644
--- a/rtc_base/socketadapters.cc
+++ b/rtc_base/socketadapters.cc
@@ -665,7 +665,7 @@
}
void AsyncSocksProxySocket::SendAuth() {
- ByteBufferWriter request;
+ ByteBufferWriterT<ZeroOnFreeBuffer<char>> request;
request.WriteUInt8(1); // Negotiation Version
request.WriteUInt8(static_cast<uint8_t>(user_.size()));
request.WriteString(user_); // Username
@@ -673,14 +673,10 @@
size_t len = pass_.GetLength() + 1;
char * sensitive = new char[len];
pass_.CopyTo(sensitive, true);
- // Don't write anything to |request| afterwards to avoid potential
- // reallocations where the old memory (containing the password) will not
- // be cleared securely.
request.WriteBytes(sensitive, pass_.GetLength()); // Password
ExplicitZeroMemory(sensitive, len);
delete [] sensitive;
DirectSend(request.Data(), request.Length());
- ExplicitZeroMemory(request.MutableData(), request.Length());
state_ = SS_AUTH;
}