ご存知かもしれませんが、Microsoftはmemcpy()
セキュリティ開発ライフサイクルを禁止し、に置き換えましたmemcpy_s()
。
void *memcpy(void *dest, const void *src, size_t n);
/* simplified signature */
errno_t memcpy_s(void *dst, size_t dstsize, const void *src, size_t n);
したがって、コードが以前は次のようになっていた場合:
if (in_len > dst_len) {
/* error */
}
memcpy(dst, src, in_len);
あれは。。。になる:
if (memcpy_s(dst, dst_len, src, src_len)) {
/* error */
}
または、切り捨てを使用して、
memcpy(dst, src, min(in_len, dst_len));
vs
(void)memcpy_s(dst, dst_len, src, src_len);
質問:余分な長さのパラメーターはどのようにしてコードをより安全にするのですか?を使用するmemcpy()
には、4つのパラメーターすべてがわかっていて、3番目の引数として適切な長さを渡す必要があります。宛先バッファサイズを誤って計算し、間違った値を渡すという同じ間違いをするのを妨げているのはdst_size
何ですか?なぜそれが違うのかmemcpy()
、なぜ非推奨になっているのかわかりません。見えない一般的なユースケースはありますか?ここで何が欠けていますか?