を使用してメモリを割り当てる場合malloc()
、読み取り専用としてマークする方法があります。それで、誰かがそれに書き込もうとすると、memcpy()は失敗しますか?
これは、ユーザーがミスしている誤ったAPI設計に関連しています- GetValue()
大容量メモリ構造の一部であるメソッドによって返されるconstポインタを使用します。メモリの大きなチャンクのコピーを避けたいので、特定の形式の構造化メモリ内にライブポインタを返します。ここで問題となるのは、このメモリに直接書き込み、割り当てを行い、開発したメモリバイナリ形式を適切に渡すSetValue()呼び出しを回避することで、機能するようにするためのハックを見つけるユーザーがいることです。作業が行われることもありますが、ユーザーによってオーバーライドされた制御フラグの誤った解釈により、メモリアクセス違反が発生することもあります。
ユーザーの教育は1つのタスクですが、今のところ、コードを失敗させたいとしましょう。
この事件を簡単に防ぐことができるかどうか疑問に思っています。
類推のために、誰かがsqliteステートメントからblob列を取得し、それに書き戻すと仮定します。sqliteの場合は意味がありませんが、私たちの場合はこれがやや起こります。