fprintf(pFile,msg.c_str());
Xcodeで警告が表示されるのはなぜですか?
Format string is not a string literal (potentially insecure)
攻撃を防ぐためにこの警告が表示されると思います。msgに%s
は、nullで終了するまでスタックを画面にストリーミングするようなものが含まれています。この場合に安全に使用する方法はありますfprintf
か?
fprintf(pFile,msg.c_str());
Xcodeで警告が表示されるのはなぜですか?
Format string is not a string literal (potentially insecure)
攻撃を防ぐためにこの警告が表示されると思います。msgに%s
は、nullで終了するまでスタックを画面にストリーミングするようなものが含まれています。この場合に安全に使用する方法はありますfprintf
か?
フォーマット文字列を指定することもできます。
fprintf(pFile, "%s", msg.c_str());
またはを使用してfputs
、
fputs(msg.c_str(), pFile);
コンパイラが警告を発した理由は、ユーザーがmsgの内容に何らかの影響を与えて、独自のフォーマット指定子を挿入できる場合、文字列の印刷方法が「フォーマット文字列エクスプロイト」と呼ばれる脆弱性につながる可能性があるためです。 ("%n"など)。提案された回答(fprintf(pFile、 "%s"、msg.c_str());)は、フォーマット文字列が一定になっているため、これを修正します。
フォーマット文字列の悪用について詳しくは、http://julianor.tripod.com/bc/formatstring-1.2.pdfをご覧ください。