Make SysUTF8ToCFStringRef and SysUTF16ToCFStringRef return ScopedCFTypeRefs.
This enforces ownership rather than merely documenting it.
Change-Id: I51f8e017694f09bda7b3b56f234b7fdc855ab679
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2264506
Commit-Queue: Robert Sesek <[email protected]>
Reviewed-by: Nico Weber <[email protected]>
Cr-Commit-Position: refs/heads/master@{#783220}
diff --git a/base/strings/sys_string_conversions_mac.mm b/base/strings/sys_string_conversions_mac.mm
index ce56dca..7a077d2e 100644
--- a/base/strings/sys_string_conversions_mac.mm
+++ b/base/strings/sys_string_conversions_mac.mm
@@ -96,17 +96,17 @@
// Given a StringPiece |in| with an encoding specified by |in_encoding|, return
// it as a CFStringRef. Returns NULL on failure.
template <typename StringType>
-static CFStringRef StringPieceToCFStringWithEncodingsT(
+static ScopedCFTypeRef<CFStringRef> StringPieceToCFStringWithEncodingsT(
BasicStringPiece<StringType> in,
CFStringEncoding in_encoding) {
const auto in_length = in.length();
if (in_length == 0)
- return CFSTR("");
+ return ScopedCFTypeRef<CFStringRef>(CFSTR(""), base::scoped_policy::RETAIN);
- return CFStringCreateWithBytes(
+ return ScopedCFTypeRef<CFStringRef>(CFStringCreateWithBytes(
kCFAllocatorDefault, reinterpret_cast<const UInt8*>(in.data()),
in_length * sizeof(typename BasicStringPiece<StringType>::value_type),
- in_encoding, false);
+ in_encoding, false));
}
// Specify the byte ordering explicitly, otherwise CFString will be confused
@@ -142,20 +142,20 @@
return SysUTF8ToWide(native_mb);
}
-CFStringRef SysUTF8ToCFStringRef(StringPiece utf8) {
+ScopedCFTypeRef<CFStringRef> SysUTF8ToCFStringRef(StringPiece utf8) {
return StringPieceToCFStringWithEncodingsT(utf8, kNarrowStringEncoding);
}
-CFStringRef SysUTF16ToCFStringRef(StringPiece16 utf16) {
+ScopedCFTypeRef<CFStringRef> SysUTF16ToCFStringRef(StringPiece16 utf16) {
return StringPieceToCFStringWithEncodingsT(utf16, kMediumStringEncoding);
}
NSString* SysUTF8ToNSString(StringPiece utf8) {
- return [mac::CFToNSCast(SysUTF8ToCFStringRef(utf8)) autorelease];
+ return [mac::CFToNSCast(SysUTF8ToCFStringRef(utf8).release()) autorelease];
}
NSString* SysUTF16ToNSString(StringPiece16 utf16) {
- return [mac::CFToNSCast(SysUTF16ToCFStringRef(utf16)) autorelease];
+ return [mac::CFToNSCast(SysUTF16ToCFStringRef(utf16).release()) autorelease];
}
std::string SysCFStringRefToUTF8(CFStringRef ref) {