2024 State of Clojure 问卷调查! 中分享你的想法。

欢迎!请访问 关于 页面获取更多关于如何使用本站的信息。

0票数
Clojure

如果你向 partition 传递了非正数 'n' 或 'step',你会得到一个无限循环。以下是一些示例

(partition 0 (link: 1 2 3))
(partition 1 -1 (link: 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

包含测试,较少的空格更改,手动抛出的 IAE。我很快会做一些基本的基准测试,尽管我预计开销会相当低,因为我们只检查一次参数。

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](https://clojure.atlassian.net/browse/CLJ-1647)(由 kworam 报告)
...