Repository: kudu
Updated Branches:
  refs/heads/master d552c4930 -> 2e462afc8


[security] fixed memory leak in Krb5CallToStatus

Change-Id: I5eb86d31819c504cd8fd630c744c6ef775c6a499
Reviewed-on: http://gerrit.cloudera.org:8080/6411
Tested-by: Kudu Jenkins
Reviewed-by: Will Berkeley <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/2e462afc
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/2e462afc
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/2e462afc

Branch: refs/heads/master
Commit: 2e462afc8f974f61e3ece556e44780455807888d
Parents: d552c49
Author: Alexey Serbin <[email protected]>
Authored: Wed Mar 15 19:59:44 2017 -0700
Committer: Will Berkeley <[email protected]>
Committed: Thu Mar 16 05:40:46 2017 +0000

----------------------------------------------------------------------
 src/kudu/security/init.cc | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/2e462afc/src/kudu/security/init.cc
----------------------------------------------------------------------
diff --git a/src/kudu/security/init.cc b/src/kudu/security/init.cc
index 294a96b..dfdb5cd 100644
--- a/src/kudu/security/init.cc
+++ b/src/kudu/security/init.cc
@@ -20,6 +20,8 @@
 #include <krb5/krb5.h>
 
 #include <algorithm>
+#include <functional>
+#include <memory>
 #include <mutex>
 #include <random>
 #include <string>
@@ -124,7 +126,11 @@ class KinitContext {
 
 Status Krb5CallToStatus(krb5_context ctx, krb5_error_code code) {
   if (code == 0) return Status::OK();
-  return Status::RuntimeError(krb5_get_error_message(ctx, code));
+
+  std::unique_ptr<const char, std::function<void(const char*)>> err_msg(
+      krb5_get_error_message(ctx, code),
+      std::bind(krb5_free_error_message, ctx, std::placeholders::_1));
+  return Status::RuntimeError(err_msg.get());
 }
 #define KRB5_RETURN_NOT_OK_PREPEND(call, prepend) \
   RETURN_NOT_OK_PREPEND(Krb5CallToStatus(g_krb5_ctx, (call)), (prepend))

Reply via email to