2024年Clojure状态调查!中分享您的想法。

欢迎!请参阅关于页面以获取更多有关此工作的信息。

0
Clojure

如果你将一个非正值传递给 partition 的 n 或 step,你将得到一个无限循环。以下是一些示例

(partition 0 [1 2 3])
(partition 1 -1 [1 2 3])

原因:partition 和 partition-all 没有检查 n 和 step 是否为正。

方法:给 partition 和 partition-all 添加检查以确保 n 和 step 为正。

补丁:clj-1647_3.patch

由以下人员预审:Alex Miller

29 答案

0

评论由:alexmiller

去做吧

0

评论由:alexmiller

去做吧

0

评论由:alexmiller

去做吧

0

评论由:alexmiller

去做吧

0

评论由:alexmiller

抱歉,浏览器失败 :)

0

评论者:kworam

感谢你注意到这个问题的Matthew,我很感激!

0

评论者:kworam

感谢你注意到这个问题的Matthew,我很感激!

0
_评论者:alex+import_

新补丁:clj-1647.patch

包含测试,较少的空白字符更改,手动抛出IAEs。我很快会进行一些基本的基准测试,虽然我预计开销会相当低,因为我们在只检查一次参数。

Kevin,你的补丁对 partition-all 有效,但对 partition 无效的原因是 partition 在启动过程中定义得比较早,而 {:pre .. :post ..} 映射直到后来增强后才被 defn 读取。
0

评论者:kworam

感谢你解决这个谜团,Matthew!

0

评论由:alexmiller

补丁看起来基本良好。几处小改动

  • internal-partition 和 internal-partition-all 应该用 {{defn-}} 标记为私有。
  • 提交描述应从 "CLJ-1647" 开始
0

评论者:mjg123

我为这个问题添加了clj-1647_2.patch以替代其他补丁。在提交信息中添加了Jira引用,并在可能的情况下使用了defn-(defn-是在某个私有函数之后定义的,但已手动添加了^:private元数据)。

0

评论由:alexmiller

这个补丁的改变将add-annotation从defn-更改为defn,但这似乎与补丁的意图无关?

0

评论者:mjg123

感谢你这么快就查看了这个错误,Alex - 对add-annotation中的那个错误表示歉意。请查看clj-1647_3.patch。

0
参考:https://clojure.atlassian.net/browse/CLJ-1647(由kworam报告)
...