中文

Java 源代码仓库中提交变更的编译

软件工程 2024-07-26 v1 编程语言

摘要

Java 应用程序将第三方依赖以字节码的形式引入。为保持这些应用程序的安全性,研究者们提出了工具用于重新识别包含已知漏洞的依赖项。然而,为实现此类重新识别,必须首先获取用于修复各个漏洞的字节码补丁。这些补丁以 fix-commit 的形式被整理在数据库中,但 fix-commit 采用源代码形式,自动编译整个 Java 项目以生成字节码颇具挑战性,尤其是针对非当前版本的代码。本文因此提出了 JESS 方法,通过仅编译给定提交中修改的相关代码来大幅避免上述问题。JESS 通过保留提交变更所引用的部分代码来实现代码压缩。为避免名称解析错误,JESS 自动推断不可用给编译器的实体的占位符。挑战在于,为促进上述重新识别,JESS 必须力求生成的字节码几乎与通过完整项目成功编译所获得的字节码相同。对 347 个 GitHub 项目的评估表明,JESS 能够以孤立方式编译 72% 的方法和构造函数,其中 89% 的字节码与原始版本一致。此外,在包含 fix-commit 的 Project KB 数据库中,仅有 8% 的提交修改的文件能够通过提供的构建脚本编译,而 JESS 能够编译这些提交修改的全部文件的 73%。

关键词

引用

@article{arxiv.2407.17853,
  title  = {Compilation of Commit Changes within Java Source Code Repositories},
  author = {Stefan Schott and Wolfram Fischer and Serena Elisa Ponta and Jonas Klauke and Eric Bodden},
  journal= {arXiv preprint arXiv:2407.17853},
  year   = {2024}
}

备注

To be published in: ICSME 2024 Proceedings