From ad3aa5205b8c4f645881276e4a9b7ce9066c3e96 Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Fri, 11 Jun 2010 23:59:49 +0100 Subject: [PATCH] comerr: Don't leak CFStringRef If str is NULL on entry to _intlize, than it will leak the CFStringRef that it constructed a few lines earlier. Fix this. Caught with clang-analyzer Change-Id: I6d62e7792918da95e4fed1c676d14ad9124d93fa Reviewed-on: http://gerrit.openafs.org/2137 Reviewed-by: Russ Allbery Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/comerr/error_msg.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/comerr/error_msg.c b/src/comerr/error_msg.c index 21d46fab9..eae3204f5 100644 --- a/src/comerr/error_msg.c +++ b/src/comerr/error_msg.c @@ -126,15 +126,25 @@ _intlize(const char *msg, int base, char *str, size_t len) CFStringRef cfdomain; CFBundleRef OpenAFSBundle = CFBundleGetBundleWithIdentifier(CFSTR("org.openafs.filesystems.afs")); - if (!str) + if (!str) { + CFRelease(cfstring); return msg; + } + snprintf(domain, sizeof(domain), "heim_com_err%d", base); cfdomain = CFStringCreateWithCString(kCFAllocatorSystemDefault, domain, kCFStringEncodingUTF8); - if (OpenAFSBundle != NULL) - cfstring = CFBundleCopyLocalizedString(OpenAFSBundle, cfstring, - cfstring, cfdomain); - CFStringGetCString(cfstring, str, len, kCFStringEncodingUTF8); + if (OpenAFSBundle != NULL) { + CFStringRef cflocal; + + cflocal = CFBundleCopyLocalizedString(OpenAFSBundle, cfstring, + cfstring, cfdomain); + CFStringGetCString(cflocal, str, len, kCFStringEncodingUTF8); + CFRelease(cflocal); + } else { + CFStringGetCString(cfstring, str, len, kCFStringEncodingUTF8); + } + CFRelease(cfstring); CFRelease(cfdomain); return str; -- 2.39.5