gpt4 book ai didi

c - 安全使用 MultiByteToWideChar

转载 作者:太空宇宙 更新时间:2023-11-04 07:03:43 26 4
gpt4 key购买 nike

我有像这样使用 MultiByteToWideChar 的代码:

wchar_t * bufferW = malloc(mbBufferLen * 2);
MultiByteToWideChar(CP_ACP, 0, mbBuffer, mbBufferLen, bufferW, mbBufferLen);

请注意,代码没有使用之前对 MultiByteToWideChar 的调用来检查新的 unicode 缓冲区需要多大,并假设它将是多字节缓冲区的两倍。

我的问题是这种用法是否安全? 是否有默认代码页将字符映射到 3 字节或更大的 unicode 字符,并导致溢出?虽然我知道用法不完全正确,但我想评估风险影响。

最佳答案

Could there be a default code page that maps a character into a 3-byte or larger [sequence of wchar_t UTF-16 code units]

目前没有 ANSI 代码页将单个字节映射到 BMP 之外的字符(即在 UTF-16 中需要一个以上的 2 字节代码单元)。

在 UTF-16 中,不能将单个多字节 ANSI 字符编码为两个以上的 2 字节代码单元。因此,更糟,您将永远不会得到长度超过输入 ANSI 字符串 2 倍的 UTF-16 字符串(不包括 null 终止符,这在这种情况下不适用因为你传递的是显式长度),并且在最好你最终会得到一个 UTF-16 字符串,它的 wchar_t 字符少于输入字符串的 char 个字符。

就其值(value)而言,Microsoft 是 endeavouring不再进一步开发 ANSI 代码页,我怀疑 NLS 文件格式需要更改才能允许它,因此将来不太可能更改。但是没有明确的 API promise 这一定会永远成立。

关于c - 安全使用 MultiByteToWideChar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35178145/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com