问题标签 [memory-safety]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
514 浏览

rust - 如何在 Rust 中为返回的元组设置静态生命周期?

假设我有以下返回元组的构造函数:

上面的代码无法编译。但是,如果我改成staticlet编译就好了。我不确定如何为返回的元组的各个值设置生命周期(在一行中)?

0 投票
2 回答
985 浏览

c - 为什么必须在 rust 中初始化结构?

在 CI 中可以使用尚未初始化的结构。我在 Rust 中尝试了这段代码:

但它产生了编译错误:

为什么这在 C 中是允许的,但在 Rust 中是错误的?

0 投票
1 回答
1311 浏览

python - Python 内存安全吗?

随着 Deno 成为 Node.js 的新竞争对手,Rust 的内存安全特性已经在很多新闻文章中被提及,一篇特别的文章指出 Rust 和 Go 有利于它们的内存安全特性,Swift 和 Kotlin 也是如此但后两者并未广泛用于系统编程。

Safe Rust 是真正的 Rust 编程语言。如果您所做的只是编写 Safe Rust,您将永远不必担心类型安全或内存安全。您将永远不会忍受悬空指针、释放后使用或任何其他类型的未定义行为。

这激起了我理解 Python 是否可以被视为内存安全的兴趣,如果是或否,安全或不安全如何?

从一开始,维基百科上关于内存安全的文章甚至没有提到 Python,而关于 Python 的文章似乎只提到了内存管理。我最接近找到答案的是丹尼尔的这个

维基百科文章将类型安全与内存安全相关联,这意味着不能像整数和字符串那样访问相同的内存区域。通过这种方式,Python 是类型安全的。您不能隐式更改对象的类型。

但即使这似乎也只是暗示了两个方面之间的联系(使用来自维基百科的关联,这又是有争议的)并且对于 Python 是否可以被视为内存安全没有明确的答案。

0 投票
1 回答
227 浏览

pointers - 是否有替代原始指针的不安全 slice::from_raw_parts 的安全替代方法?

我有一个 Rust 动态库,可以从任何语言调用。导出函数的参数是两个char *指向内存的指针和每块内存的两个长度。

问题是,from_raw_parts如果长度错误,它会简化为 memcpy,并且可能会以各种危险的方式出现段错误。然后我bincode::deserialize在切片上使用它们作为 Rust 对象。有没有更安全的选择来处理传入的指向内存的原始指针?

0 投票
2 回答
86 浏览

c - 静态链接到 C 程序的 Rust 代码是否因此获得任何有益的安全属性?

灵感来自 Carol Goulding 关于“Rust Out Your C”的演讲和我阅读的一篇关于将 C 移植到 Rust 函数的文章。

如果我有一个由 3 个函数组成的程序一个接一个地调用:

1 (C) --> 2 (C) --> 3 (C)

并将第二个函数替​​换为静态链接的 Rust 函数,因此流程变为:

1 (C) --> 2 ( R ) --> 3 (C)

函数 2 中的代码现在是内存和/或类型安全吗?它是否在安全方面获得了任何额外的、有益的特性?

0 投票
1 回答
214 浏览

c - 在 C 中可以安全递归吗?

如果 C 中的堆栈大小是一个实现细节,而堆栈溢出是未定义的行为,那么是否有可能在没有召唤鼻子恶魔的可能性的情况下执行任何递归?

如果我递归遍历一个数据结构,举一个简单的例子:

是否可以实施某种检查,以便此示例可以在任何遵循标准的 C 编译器上安全运行,是否有某种宏,或者完全不可能,并且没有办法制作这个示例或任何类似的模式安全吗?

0 投票
1 回答
141 浏览

swift - 为什么单线程swift中存在内存冲突?

参考官方教程,swift中存在内存冲突,但是,根据我的javascript知识,没有内存冲突,下面的代码永远是对的。

0 投票
1 回答
96 浏览

c++ - 无缓冲区溢出的任意写入漏洞

我正在深入研究内存漏洞(C/C++),我很想知道什么样的漏洞允许任意内存写入(或读取)而不利用缓冲区溢出(或过度读取)。最终目标是利用内存漏洞(源)到达任意位置(目标),而无需访问目标和源之间的内存。位置是否可以选择无所谓,我只对到达远处位置的能力感兴趣。

我知道一个可能的例子是在 printf 函数和类似函数中使用 %n 占位符(格式字符串漏洞)。还有其他的吗?

我也知道以某种方式破坏索引(可能是整数溢出)可能会导致这样的任意写入,如下例所示:

但是,我想知道是否还有更多此类漏洞的经典示例。谢谢您的帮助!

0 投票
1 回答
34 浏览

c# - 在 C# 中将位从有符号复制到相同大小的无符号变量的最佳方法

在 C++ 或 C 中,我要么使用 memcpy,要么使用如下指针:

我知道 C# 支持指针,但我试图避免在这种情况下使用它们。我想不出更明智的解决方案。