代码拉取完成,页面将自动刷新
Libarchive历史安全漏洞较多,其中内存漏洞在两个项目漏洞中分别占比75%,产生这些安全漏洞或与这些安全漏洞相关的模块称为高危模块。本项目拟通过Rust语言重写libarchive库的这些高危模块,利用Rust语言自身的内存安全机制修复这些安全漏洞,增加两个库的安全性和可靠性。
本项目主要改写的模块包括:
(1)int archive_read_support_format_XX(struct archive *_a)系列方法
(2)archive_read_support_format_all(struct archive *a)
(3)archive_string.c
(4)archive_acl.c
上图展示了libarchive项目中各个模块之间的关系,以及本项目中改写部分与不改写部分之间的关系。
准备make,cmake,rust等环境。版本推荐:
安装步骤如下:
# bsdcpio --help
bsdcpio: manipulate archive files
First option must be a mode specifier:
-i Input -o Output -p Pass
Common Options:
-v Verbose filenames -V one dot per file
Create: bsdcpio -o [options] < [list of files] > [archive]
-J,-y,-z,--lzma Compress archive with xz/bzip2/gzip/lzma
--format {odc|newc|ustar} Select archive format
List: bsdcpio -it < [archive]
Extract: bsdcpio -i [options] < [archive]
bsdcpio 3.4.2 - libarchive 3.4.2 zlib/1.2.11 liblzma/5.2.5 bz2lib/1.0.8 liblz4/1.9.2 libzstd/1.4.4
int r;
ssize_t size;
struct archive *a = archive_read_new();
archive_read_support_filter_all(a);
archive_read_support_format_raw(a);
r = archive_read_open_filename(a, filename, 16384);
if (r != ARCHIVE_OK) {
/* ERROR */
}
r = archive_read_next_header(a, &ae);
if (r != ARCHIVE_OK) {
/* ERROR */
}
for (;;) {
size = archive_read_data(a, buff, buffsize);
if (size < 0) {
/* ERROR */
}
if (size == 0)
break;
write(1, buff, size);
}
archive_read_free(a);
rust库作为libarchive的依赖不单独对外提供服务 libarchive-rust的使用方式与libarchive基本相同,更多使用方式可以参考:https://github.com/libarchive/libarchive
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型