SECR2015で当社が開催したコンテストの結果

悲しいユニコーン

当社(OOO「プログラム検証システム」、PVS-Studioの開発者)は、SECR2015カンファレンスでコンペを開催しました。 コンテストの本質は、コード内で最も興味深いエラーを見つけることでした。 実際、コンテストに参加したのは1人だけなので、一般的に言うことはありません。 それにもかかわらず、多くの人が競争がどのように終わったのかを尋ねたので、私はこの主題について小さなメモを書くことにしました。



SECR2015カンファレンスのスポンサーの1つとして、 PVS-Studioの使用に関連する小さなコンテストを開催することにしました。 この目的のために、各参加者には、説明書、小さなチョコレートバー、およびPVS-Studioを数日間完全に使用するためのキーが入った封筒が提示されました。



大会の最初の目標は、会議参加者の一部が最終的に怠を打ち負かし、プロジェクトでPVS-Studioを試してみることにしたことでした。 これに関する状況は私たちには知られていません。



コンテストの2番目の目標は、エラーのあるコード例を収集し、興味深い記事を書くことでした。 すべての人が自分のコードを公開したいとは限らないことを理解しました。 私たちは、認識を超えてコードを変更する人々を提供したかったのです。 まあ、または私たちはそれらについてまったく書くことができませんでしたが、彼らはまだ競争に参加するでしょう。 受賞者には賞品(さまざまなギフトカード)が授与されました。 残念ながら、このタスクは確かにうまくいきませんでした。



だから、競争は完了し、それは在庫を取る時間です。 競争に参加したのは1人だけでした。 彼は自動的に勝者になります。 彼に挨拶しましょう:



Alexey Drozdov、会社[削除]。



会社のプロジェクトの1つをチェックした後、彼は存在しないバッファーの使用に関連する興味深いエラーに気付きました。 幸運なことに、このエラーは明らかになりませんが、バグは依然としてバグのままです。 エラーの本質は、次の擬似コードによって示されます。

const char* ptr = nullptr; while (p < end) { const unsigned int uc = GetValue(*p++); switch (uc) { case 1: ptr = "a"; break; case 2: ptr = "b"; break; case 3: ptr = "c"; break; default: { char buffer[0x100]; ... ptr = buffer; } } } if (ptr) result = ptr; //    'result'   //  
      
      





V507の診断によりエラーが検出されました。 プログラムは、デフォルトブロックを終了した後に存在しなくなるバッファを使用します。 ただし、このコードは古く、N年間正常に機能しています。 運がすべてです。 Visual C ++は、関数を入力するときに、すべての配列/変数のすぐ下にスタック上のスペースを割り当て、割り当てられたメモリを再利用しません。 ただし、ご存知のように、これは当面の運です。



Alexeyに感謝し、彼に賞品(200ドルのギフトカード)を贈ります。



PS現時点では、「 PVS-Studioユニコーンを使用した写真のキャスト 」という新しいコンテストがあります。 簡単に言うと、ユニコーンで写真を撮り、写真コンテストに参加することを申し出ます。 すべてのファンを招待します。



All Articles