regerror
エラー メッセージを格納するために必要なバイト数を返します。私が使用しているアプリケーションはスタックに「深く」入っていないため (つまり、深くネストされた関数呼び出しはありませんalloca
)、エラーメッセージ用の一時ストレージを取得するために (アプリケーションが既に他の目的で使用している) を使用することを考えていました(ヒープではなく) スタック上。
スタック オーバーフローに遭遇しないように、エラー メッセージ (長さ) が制限されると想定しても安全ですか?
これは (使用されたメッセージ カタログを操作することによって) セキュリティ ホールを開きますか?
size_t const length = regerror(status, regex, NULL, 0);
char * const buffer = alloca(length);
size_t const check_length = regerror(status, regex, buffer, length);
assert(check_length == length);