例 3: ソースとシンクのファイルが異なる場合

次の例では、シンクと異なるファイル内のソースを示します。

TestCase_IOT_Xfile_Part1.java:

public class TestCase_IOT_XFile_Part1 {
	public static void main(String[] args) {
		try {
			TestCase_IOT_XFile_Part1 testCase =
				new TestCase_IOT_XFile_Part1();
			TestCase_IOT_XFile_Part2 testCase2 =
				new TestCase_IOT_XFile_Part2();
			testCase2.writeToVulnerableSink(
				testCase.getVulnerableSource(args[0]));
		} catch (Exception e) {
		}
	}

	public String getVulnerableSource(String file)
		throws IOException, FileNotFoundException {
		FileInputStream fis = new FileInputStream(file);
		byte[] buf = new byte[100];
		fis.read(buf);
		String ret = new String(buf);
		fis.close();
		return ret;
	}
}

TestCase_IOT_Xfile_Part2.java:

public class TestCase_IOT_XFile_Part2 {
	public void writeToVulnerableSink(String str)
		throws FileNotFoundException {
		FileOutputStream fos = new FileOutputStream(str);
		PrintWriter writer = new PrintWriter(fos);
		writer.write(str);
	}
}

TestCase_IOT_Xfile_Part1.java から TestCase_IOT_Xfile_Part2.java までデータをトレースすることにより、プログラム全体を通じてデータ・フローをトレースできます。次のように、スタック・トレースが表示されます。

「トレース」ビューに、TestCase_IOT_XFile_Part1 から TestCase_IOT_XFile_Part2 へのデータ・フローが示されています。

この例では、TestCase_IOT_XFile_Part1 から TestCase_IOT_XFile_Part2 まで、main メソッド全体のデータ・フローを示しています。