Firebreath:二进制字符串返回值异常

时间:2013-06-24 20:18:48

标签: npapi firebreath browser-plugin

我有一段代码从CAPICOM.Utilities获取随机二进制字符串。

m_pUtilities.CreateInstance(__uuidof(Utilities));
_bstr_t bstrResult;
m_pUtilities->raw_GetRandom(64, CAPICOM_ENCODE_BINARY, bstrResult.GetAddress());

我做了一个返回

的方法
return std::wstring(bstrResult);

我的方法崩溃了插件appr。 6个电话中的1个。例外描述是 chrome.exe中0x7572969b处的未处理异常:Microsoft C ++异常:内存位置的utf8 :: invalid_utf16 。 我试图将我的方法的返回类型从FB :: variant更改为std :: wstring,但这并没有帮助。

我做错了什么?我该如何返回二进制字符串?将二进制字符串转换为base64或返回字符串中的其他更改不适合我。

1 个答案:

答案 0 :(得分:2)

如果要将此字符串作为字符串传递给JavaScript,则确实需要使用CAPICOM_ENCODE_BASE64 - 否则此缓冲区中的值可能是任何值,包括字符空间外的值。有些代码显然会检查这一点,导致您的异常。

如果您只需要在插件内部使用此功能,请不要使用字符串,例如std::vector<WCHAR>或仅使用BSTR

旁注:在这种情况下无关紧要,但BSTR的长度为前缀,BSTRstd::wstring都可以包含嵌入0 s - 所以要正确,你真的必须返回std::wstring(bstr.GetBSTR(), bstr.length())