界: API Abuse

API は、呼び出し元と呼び出し先の間のコントラクトです。最も一般的な API の不正使用の形態は、呼び出し元がこのコントラクトの終わりを守らないことによって発生します。たとえば、プログラムが chroot() を呼び出した後に chdir() を呼び出すのに失敗すると、アクティブなルート ディレクトリを安全に変更する方法を指定したコントラクトに違反することになります。ライブラリの悪用のもう 1 つの良い例は、呼び出し先が信頼できる DNS 情報を呼び出し元に返すことを期待することです。この場合、呼び出し元は、呼び出し先の API の動作 (戻り値が認証目的に使用できること) についてある種の仮定をすることで、呼び出し先の API を悪用します。また、相手側から、呼び出し元と呼び出し先のコントラクトを違反することもできます。例えば、コーダーが SecureRandom をサブクラス化し、ランダムではない値を返した場合、コントラクトに違反することになります。

Code Correctness: ToString on Array

Abstract
ToString() は配列でコールされます。
Explanation
ほとんどの場合、配列で ToString() がコールされているということは、開発者が配列の内容を文字列として返そうとしていることを意味します。しかし、配列で ToString() を直接コールすると、その配列のタイプを含んだ文字列値が返されます。

例 1: 次のコードでは、System.String[] を出力します。

String[] stringArray = { "element 1", "element 2", "element 3", "element 4" };
System.Diagnostics.Debug.WriteLine(stringArray.ToString());
References
[1] Class Arrays Microsoft
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398
desc.structural.dotnet.code_correctness_tostring_on_array
Abstract
toString() は配列でコールされます。
Explanation
ほとんどの場合、配列で toString() がコールされているということは、開発者が配列の内容を文字列として返そうとしていることを意味します。しかし、配列で toString() を直接コールすると、その配列のタイプおよびメモリのハッシュコードを含んだ文字列値が返されます。
例 1: 次のコードは、[Ljava.lang.String;@1232121 を出力します。

String[] strList = new String[5];
...
System.out.println(strList);
References
[1] Class Arrays Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398
desc.structural.java.code_correctness_tostring_on_array