滥用实际上是 Python 表达式的 Conda 的 YAML 注释

主要观点:作者介绍了自己喜欢的构建系统 jinja-preprocessed-eval-preprocessed YAML,在向 Conda Forge 提交 Conda 包时遇到需要标记仅适用于 Linux 和 MacOS 以及指定 Python 版本等需求,通过 Conda 的选择器(selector)来实现,如在meta.yaml中使用# [win]等形式进行条件判断,还尝试了在选择器中实现任意代码执行,包括写入文件、运行 shell 命令、与其他计算机通信、生成反向 shell 等操作,探讨了选择器的可放置位置、代码实际调用eval的位置等,最后对这种可执行 YAML 注释的可利用性进行了分析并得出结论。

关键信息:

  • meta.yaml中可通过# [win]等形式定义选择器条件。
  • 能在选择器中实现多种操作,如写入文件、运行 shell 命令等。
  • 代码中eval_selector函数用于评估选择器。
  • 对选择器可利用性的分析及结论。

重要细节:

  • 作者尝试的各种在选择器中执行的代码示例及结果,如写入/tmp/foo文件、运行echo test等 shell 命令、与其他计算机通信等。
  • 关于选择器代码放置位置的尝试及结果,如放在source部分等。
  • eval函数在代码中的位置及引入历史的追溯。
阅读 9
0 条评论