}
/* CFDataRef <--> CSSM_DATA */
-CFDataRef p12CssmDataToCf(
+CFDataRef CF_RETURNS_RETAINED p12CssmDataToCf(
const CSSM_DATA &c)
{
return CFDataCreate(NULL, c.Data, c.Length);
if(cfStr == NULL) {
return NULL;
}
- CFIndex strLen = CFStringGetLength(cfStr);
+
+ CFIndex strLen = 0;
+ CFRange range = { 0, CFStringGetLength(cfStr) };
+ CFStringGetBytes(cfStr, range, kCFStringEncodingUTF8, 0, FALSE, NULL, 0, &strLen);
if(strLen == 0) {
return NULL;
}
+
CSSM_DATA_PTR rtn = coder.mallocn<CSSM_DATA>();
- coder.allocItem(*rtn, strLen + 1);
- if(!CFStringGetCString(cfStr, (char *)rtn->Data,strLen + 1,
- kCFStringEncodingUTF8)) {
+ coder.allocItem(*rtn, strLen);
+
+ if(!CFStringGetBytes(cfStr, range, kCFStringEncodingUTF8, 0, FALSE, (UInt8*)rtn->Data, strLen, &strLen)) {
/* not convertible from native Unicode to UTF8 */
return NULL;
}