#ncurses-rs #tiny #light #trying #idea #getting #reimagining

ncurses-lite

对 ncurses-rs 的微小重构

2 个版本

0.1.1 2022年7月24日
0.1.0 2022年7月23日

#6 in #trying


用于 rust-warrior

MIT 许可证

6KB
52

ncurses-lite

这是一个对 ncurses 的轻量级(微观)重构。

想法源于尝试在 rust-warrior 中使用 ncurses-rs,并在 GitHub dependabot 接收到警报后产生的。

安全问题

格式字符串处理不当

在 Rust 的 ncurses 包中发现了一个问题。在 printw 函数中存在格式字符串问题,因为 C 格式参数被错误处理。

缓冲区溢出和格式漏洞

在 Rust 的 ncurses 包中发现了一个问题。在 instrmvwinstr 函数中存在缓冲区溢出,因为这些函数与 C 函数的交互处理不当。

instr 函数的注释如下

pub fn instr(s: &mut String) -> i32
{
  /* XXX: This is probably broken. */
  unsafe
  {

放心吗?

mvwinstr 函数也有相同的注释

pub fn mvwinstr(w: WINDOW, y: i32, x: i32, s: &mut String) -> i32
{
  /* XXX: This is probably broken. */
  unsafe
  {

这些漏洞已在此问题中报告,其中链接到

网上有一些 curses 文档,例如这个页面记录了 innstr 函数系列。

如果...

鉴于有漏洞的函数的复杂性质,以及验证它们是否目前“损坏”或更改是否也会“损坏”的困难...

并且这些函数都没有在 rust-warrior 中使用...

另一个选择是创建一个库,该库在不包含这些漏洞的情况下暴露 ncurses 的必要部分给 Rust,只需简单地省略那些函数即可。

API

以下函数已实现

  • initscr
  • endwin
  • curs_set
  • newwin
  • waddch
  • waddstr
  • wclear
  • wrefresh

依赖项

~43KB