No need for strncpy in passwordCallback
authorYedidya Feldblum <yfeldblum@fb.com>
Mon, 31 Jul 2017 19:04:10 +0000 (12:04 -0700)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Mon, 31 Jul 2017 19:06:36 +0000 (12:06 -0700)
Summary:
[Folly] No need for `strncpy` in `passwordCallback`.

Careful reading of the documentation:

> The pem_passwd_cb must write the password into the provided buffer `buf` which is of size `size`.
>
> https://wiki.openssl.org/index.php?title=Manual:SSL_CTX_set_default_passwd_cb(3)&oldid=761

No mention is made of a requirement on the password being written into `buf` that it be null-terminated.

Reviewed By: knekritz, meyering

Differential Revision: D5524814

fbshipit-source-id: 6cfc588cdf3675281ffe39e6af376f3f0631d1b0

folly/io/async/SSLContext.cpp

index 29b202f825dc80ab7063f05b30f39577e88e0ed6..3d440a8bfa040752469817df5ba55c7772488982 100644 (file)
@@ -641,12 +641,9 @@ int SSLContext::passwordCallback(char* password,
   std::string userPassword;
   // call user defined password collector to get password
   context->passwordCollector()->getPassword(userPassword, size);
-  auto length = int(userPassword.size());
-  if (length > size) {
-    length = size;
-  }
-  strncpy(password, userPassword.c_str(), size_t(length));
-  return length;
+  auto const length = std::min(userPassword.size(), size_t(size));
+  std::memcpy(password, userPassword.data(), length);
+  return int(length);
 }
 
 void SSLContext::setSSLLockTypes(std::map<int, LockType> inLockTypes) {