問題タブ [splint]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
5698 参照

linux - splint ツールでソース コードをチェックするときにヘッダー ファイルを含める方法は?

2 つの C プログラム ソース コード ファイルと、関数宣言だけを含む 1 つのヘッダー ファイルを作成しました。

mypattern.h

pattern_main.c

pattern_search.c

このコードを Linux の splint ツールでチェックしているときに、

次のエラーが表示されます。

どうすれば正しくできますか?

0 投票する
2 に答える
2158 参照

gcc - splint と gcc: 外部の静的コード分析ツールは、C コードベースのために努力する価値がありますか?

私はかなり複雑なプロジェクトに取り組んでおり、追加の複雑さとして、カーネル内の Linux モジュールです。そのようなコードベースで splint のようなリンティング ツールを実行することは、確かに不可能ではありません [1] が、些細な努力だけでは何かを実現するには十分ではありませんでした。

これにもっと時間を費やす前に、この問題に関するフィードバックや意見を集めたいと思っていました。十分なフラグがあれば、gcc は非常に多くのチェックを行います。別の静的コード分析ツールを使用する価値はありますか?

[1] http://www.cs.virginia.edu/pipermail/splint-discuss/2005-January/000531.html

0 投票する
1 に答える
373 参照

c - スプリント境界チェックによる奇妙な動作

スプリントの専門家はいますか?? C で作成した大規模なプロジェクトを静的に分析するためにスプリントを使用しようとしています。明らかに境界エラーではない境界チェック エラーの数が多すぎます。問題を切り分けるために小さなテスト プログラムを作成しましたが、コードに対して splint を実行すると、非常に奇妙な警告が表示されることに気付きました。私は3つの異なる例を持っています。最初は次のとおりです。

arr[3]割り当ては、期待どおりに使用すると警告を生成しますが、使用し+boundsても何もしません+likely-bounds。何をし+likely-boundsますか?うまくいかないようです。2 番目の例:

この例では、var = arr[i]明らかにそうではないにもかかわらず、スプリントは配列の境界外を読んでいると不平を言っています(「メモリ読み取りは、割り当てられたストレージを超えたメモリを参照しています。」)。配列の値が初期化されていないため、これは警告になるはずですが、それは私が受け取る警告ではありません。配列の最後の値を初期化すると、エラーがクリアされます (ただし、最初または 2 番目の値を初期化しても解決されません)。私は何か間違ったことをしていますか?3 番目の例では:

に対しては警告が生成されますが、ループが配列の範囲外にあることは明らかですが、に対しては生成されarr[3] = 0ません。var = arr[i]配列の最後に書き込むと、スプリントが配列を認識する大きさが拡大するようです。そんなことがあるものか?

要するに、私の質問は次のとおりです。

  1. 可能性のある境界フラグは何をしますか?
  2. 範囲外に出ることに関連する正当なエラーをスプリントに与える方法はありますか?
  3. 境界を越えてアクセスされる配列のサイズを splint が増やさないようにする方法はありますか? 現在、スプリントは 750 を超える警告を報告しており、各警告を 1 つずつ確認する時間がありません。
0 投票する
1 に答える
507 参照

parse-error - /usr/include/arpa/inet.h:35:27:Splintの解析エラー

スプリントでコードをチェックしているときに、1つの問題が発生しました。最初、POSIXLIBでエラーが発生しました。したがって、次のように+posixlibを使用してスプリントを実行します。

しかし、私は次のエラーが発生しました:

Splint 3.1.1---2004年6月15日

このエラーを解決するにはどうすればよいですか?

0 投票する
1 に答える
762 参照

c - Splintの「フレッシュストレージ」とは何ですか?

Splintのドキュメントで「フレッシュストレージ」を検索し、その言及を見つけましたが、正式な定義はありません。nullまたはonlyのような他の修飾子は、私が理解して使用しようとしています。新鮮なストレージが何であるかはわかりません。

状況はこれです:

これは宿題ですが、この質問は宿題に直接関係する必要はありません。これは副子の質問です。

0 投票する
0 に答える
334 参照

c - 一貫性のない即時アドレス転送 SPLINT

ここにコード セグメントがありますが、ここで SPLINT から警告が表示されます

私はこの問題を回避しようとしています。どなたでもこの問題に光を当てることができます。私は3時間ほどグーグルで検索してきましたが、解決策は見つかりませんでした。

0 投票する
1 に答える
1086 参照

c - splint: for ループの解析エラー

c99 コードの静的アナライザーとして splint を使用しています。

Splint は c99 に完全には準拠していないようです。したがって、このパッチを適用しました: http://www.cs.virginia.edu/pipermail/splint-discuss/attachments/20080718/52cc25f6/attachment.obj

宣言が一番上にないため、解析エラーが発生しなくなりました。

しかし、for ステートメントに変数宣言を入れると、for ループで解析エラーが発生します。例えば:

回避策は、次のように記述することです。

しかし、すべての for ループを適応させたくないので、この問題を解決するパッチが利用可能かどうか疑問に思っています。

0 投票する
1 に答える
682 参照

c - 汚染分析の実行方法を添え木

Splintを使用して汚染分析を実行するにはどうすればよいですか?

Ubuntu12.04にSplintをインストールしました。以下のような小さなテストケースを作成しました。

また、次の内容でsplint.xhファイルを作成しました。

また、以下の内容でsplint.mtsファイルを作成しました。

次に、最後に次のコマンドでスプリントツールを実行しました。

prg001.cがサンプル入力である場合、「splint」はsplint.mtsおよびsplint.xhファイルを指します。すべてのファイルは現在のディレクトリにあります。

私が受け取った出力は次のとおりです。

スプリント3.1.2---2012年8月21日

prg001.c :(関数main内)prg001.c:6:1:printfへのフォーマット文字列パラメーターはコンパイル時定数ではありません:フォーマットパラメーターはコンパイル時に不明です。引数は型チェックできないため、これはセキュリティの脆弱性につながる可能性があります。(警告を禁止するには-formatconstを使用します)prg001.c:3:14:パラメーターargcは使用されません関数パラメーターは関数の本体で使用されません。型の互換性や将来の計画のために引数が必要な場合は、引数の宣言で/ @ unused@ /を使用してください。(警告を禁止するには-paramuseを使用します)

チェックが終了しました---2つのコード警告

出力に汚染分析のヒントはありません。Splintを使用して汚染分析を行う方法について誰かが私を助けてくれますか?

ありがとう

0 投票する
3 に答える
2644 参照

c - C の汚染分析

C プログラムで静的汚染分析を実行する必要があります。Splint を使用してみましたが、うまくいきませんでした。汚染分析を実行できるオープンソースまたはフリーウェアのツールは他にありますか?

はいの場合は、その使用方法についても言及するか、リンクを参照してください。あなたの助けに感謝。ありがとう

0 投票する
1 に答える
78 参照

c89 - C90 基礎となる抽象型へのキャスト

ロギング関連関数に依存するロギング構造は次のようになります。

このロギング関数には、ロガーが持つジョブに応じて異なるポインターが割り当てられた抽象 logData があります。

Filelogger はある時点で、このように保存されたファイルハンドルにアクセスします。

これはコンパイルされますが、SPLint はこれに不満を持っており、次のメッセージで不平を言っています。

基礎となる抽象型へのキャストFILE *:(FILE *)(logger->logData)

SPLint を満たすにはどうすればよいですか?

  • 周りに散らかそうとしまし/*@abstract@*/たが、助けにはなりませんでした

C90 でデータを格納およびアクセスしながら、実装とは関係なく型を渡すための構造シグネチャを維持するより良い方法はありますか?