テストされた Python リポジトリの 3.6% にカンマ欠落エラーがありました

コード内でのカンマの誤った使用に関連するエラーに対する Python コードの脆弱性に関する調査結果が公開されました。 この問題は、Python が列挙するときにリスト内の文字列がカンマで区切られていない場合は自動的に連結し、値の後にカンマが続く場合にはその値をタプルとして扱うという事実によって発生します。 研究者らは、Python コードを使用して 666 の GitHub リポジトリの自動分析を実施した後、調査したプロジェクトの 5% でカンマの問題の可能性があることを特定しました。

さらに手動で検査したところ、実際のエラーは 24 のリポジトリ (3.6%) にのみ存在し、残りの 1.4% は誤検知であることがわかりました (たとえば、複数行のファイル パス、長いハッシュ、HTML を連結するために、行間のカンマを意図的に省略する可能性があります)ブロックまたは SQL 式)。 実際にエラーが発生した 24 のリポジトリの中に、Tensorflow、Google V8、Sentry、Pydata xarray、rapidpro、django-colorfield、django-helpdesk などの大規模プロジェクトが含まれていることは注目に値します。 ただし、カンマに関する問題は Python に固有のものではなく、C/C++ プロジェクトでよく発生します (最近の修正例としては、LLVM、Mono、Tensorflow などがあります)。

調査された主なエラーの種類は次のとおりです。

  • リスト、タプル、セットで誤ってカンマが欠けていると、文字列が個別の値として解釈されずに連結されてしまいます。 たとえば、Sentry では、テストの XNUMX つでリスト内の文字列「releases」と「discover」の間にカンマがありませんでした。その結果、「/releases」と「」をチェックする代わりに、存在しない「/releasesdiscover」ハンドラをチェックすることになりました。 /discover」を別途実行してください。
    テストされた Python リポジトリの 3.6% にカンマ欠落エラーがありました

    もう 572 つの例は、rapidpro でコンマが欠落しているため、XNUMX つの異なるルールが XNUMX 行目でマージされていることです。

    テストされた Python リポジトリの 3.6% にカンマ欠落エラーがありました

  • 単一要素のタプル定義の末尾にカンマがないため、代入でタプルではなく通常の型が割り当てられます。 たとえば、式「values = (1,)」は 1 つの要素のタプルの変数への代入になりますが、「values = (XNUMX)」の場合は整数型の代入になります。 これらの割り当ての括弧は型定義には影響せず、オプションであり、タプルの存在はコンマの存在のみに基づいてパーサーによって判断されます。 REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated' # タプルの代わりに文字列が割り当てられます。 ) }
  • 逆の状況は、代入中に余分なコンマが発生することです。 代入の末尾に誤ってカンマを残してしまった場合、通常の型ではなくタプルが値として代入されます(たとえば、「value = 1」の代わりに「value = 1」を指定した場合)。

出所: オープンネット.ru

コメントを追加します