From 0b771b33fd934db9a7962ad704cdd38f72895c1a Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Mon, 1 May 2017 13:45:30 -0700 Subject: [PATCH] Stop writing NUL bytes in adbkey.pub. In N we moved some code from C to C++ without realizing that EVP_EncodedLength includes space for a terminating NUL and EVP_EncodeBlock writes one. Because our key reading code copes with the NUL, we never noticed. Distinguish between the required space returned by EVP_EncodedLength and the actual number of bytes (not including NUL) used return by EVP_EncodeBlock. Bug: http://b/36187819 Test: hexdump of ~/.android/adbkey.pub Change-Id: I81a487ddbb5c884593b6426d1f41cfaece26ff90 --- adb/adb_auth_host.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/adb/adb_auth_host.cpp b/adb/adb_auth_host.cpp index c3f1fe07d..365bf77a9 100644 --- a/adb/adb_auth_host.cpp +++ b/adb/adb_auth_host.cpp @@ -82,16 +82,17 @@ static bool write_public_keyfile(RSA* private_key, const std::string& private_ke return false; } - size_t base64_key_length; - if (!EVP_EncodedLength(&base64_key_length, sizeof(binary_key_data))) { + size_t expected_length; + if (!EVP_EncodedLength(&expected_length, sizeof(binary_key_data))) { LOG(ERROR) << "Public key too large to base64 encode"; return false; } std::string content; - content.resize(base64_key_length); - base64_key_length = EVP_EncodeBlock(reinterpret_cast(&content[0]), binary_key_data, - sizeof(binary_key_data)); + content.resize(expected_length); + size_t actual_length = EVP_EncodeBlock(reinterpret_cast(&content[0]), binary_key_data, + sizeof(binary_key_data)); + content.resize(actual_length); content += get_user_info();