NumPy 1.13.2 发布说明解读:np.pad 安全漏洞(CVE-2017-12852)修复与关键回归补丁

发布时间:2026/9/20 18:04:48
NumPy 1.13.2 发布说明解读:np.pad 安全漏洞(CVE-2017-12852)修复与关键回归补丁 科学计算数据分析【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址https://gitcode.com/gh_mirrors/nu/numpy点击查看免费下载本文基于当前仓库中的官方发布说明 doc/source/release/1.13.2-notes.rst 撰写围绕 NumPy 1.13.2 这一补丁版本展开它修复了自 1.13.1 以来发现的若干问题其中最重要的是np.pad相关的缓冲区溢出安全漏洞 CVE-2017-12852 与临时变量消除temporary elision缺陷。阅读本文后你将了解该版本的安全风险背景、20 个合并 PR 各自修复的具体问题、对应功能的仓库源码位置以及升级此版本时的注意事项。版本定位面向 1.13 用户的必须升级补丁NumPy 1.13.2 是一个bugfix release缺陷修复版本发布于 1.13.1 之后专门用于修复 1.13 系列中陆续发现的问题。发布说明开篇即给出明确建议Users of earlier versions of 1.13 should upgrade.这意味着所有使用 1.13.0 / 1.13.1 的用户都应升级到 1.13.2。升级的核心动因有两个CVE-2017-12852np.pad中存在的安全漏洞可能导致越界读写详情见下文专门章节临时变量消除temporary elision缺陷一项与表达式求值优化相关的正确性问题。支持的语言与运行时环境1.13.2 支持的 Python 版本为2.7 与 3.4 - 3.6其中从 PyPI 获取的 Python 3.6 wheels 使用Python 3.6.2构建官方说明其与所有更早的 Python 3.6 小版本兼容Windows wheels 从 ATLAS 切换为 OpenBLAS作为线性代数后端官方预期这将改善np.linalg等线性代数函数的性能。这一后端切换是该版本在分发层面值得关注的变化ATLAS 需要针对具体机器调优而 OpenBLAS 提供开箱即用的通用优化二进制因此对 Windows 用户的矩阵运算性能通常更为友好。安全修复np.pad 与 CVE-2017-12852本次发布最重要的修复是 PR#9742#9742 BUG: Fix np.pad for CVE-2017-12852CVE-2017-12852 是 2017 年披露的 NumPy 缓冲区溢出漏洞根因位于np.pad的numpy/lib/_arraypad_impl.py中pad_width的处理逻辑在特定构造的输入下填充宽度计算会越过数组边界产生越界内存访问。由于np.pad会接收外部输入例如处理用户上传数据的 Web 服务这类漏洞在当时被普遍视为可被远程利用的内存安全问题。在 numpy/lib/_arraypad_impl.py 中可以看到pad的当前实现1.13.2 之后的演进版本对输入做了严格约束def pad(array, pad_width, modeconstant, **kwargs): ... array np.asarray(array) ... pad_width np.asarray(pad_width) if not pad_width.dtype.kind i: raise TypeError(pad_width must be of integral type.) # Broadcast to shape (array.ndim, 2) pad_width _as_pairs(pad_width, array.ndim, as_indexTrue)其中关键点是pad_width必须为整型dtype.kind i并统一被广播为(array.ndim, 2)的成对宽度_as_pairs。修复后的np.pad支持constant、edge、linear_ramp、maximum、mean、median、minimum、reflect、symmetric、wrap、empty等多种填充模式用户也可以传入自定义的逐轴填充函数。对普通使用者而言升级后无需改动任何调用代码np.pad的公开 API 保持不变。正确性修复临时变量消除temporary elision本次发布的另一项关键修复是临时变量消除temporary elision相关的两个 PR#9732 BUG: Make scalar function elision check if temp is writeable. #9771 BUG, MAINT: Fix mtrand for Cython 0.27.临时变量消除是 NumPy 底层求值优化机制当形如b a 1的表达式计算结果时编译器/运行时若判断a的缓冲区可以复用例如a是临时中间结果、不再被引用就会就地写入a的内存避免一次内存分配与拷贝。PR #9732 修复的核心问题是在标量函数scalar function即作用于标量并返回标量的 ufunc执行 elision 优化时必须检查被复用的临时缓冲区是否可写writeable。若临时结果恰为只读例如由只读输入产生的视图就地写入会触发崩溃或未定义行为。修复后该优化路径会先做可写性校验不满足条件时退回常规的分配-拷贝路径。另外numpy/random模块的mtrand即RandomState的底层 Cython 实现也因Cython 0.27的兼容性问题进行了修复PR #9771该类问题同样与 Cython 生成的代码在临时对象生命周期管理上的变化有关。20 个合并 PR 全量解读1.13.2 共合并了20 个 pull requests涉及 12 位贡献者姓名后带 的为首次贡献。按功能类别整理如下核心数值计算修复PR内容源码对应#9556修复指定dtypenp.float64时true_divide的回归问题true_divide的 ufunc 实现定义于 numpy/_core/code_generators/generate_umath.py其在 Python 层的主要调用点见 numpy/_core/_methods.py#9736修复np.gradient的若干问题含边界处理、坐标间距等实现位于 numpy/lib/_function_base_impl.py支持edge_order{1,2}与axis指定子轴#9766修复直方图对无符号 bin 值的单调性检查—#9767确保count_nonzero返回一致的结果 dtypecount_nonzero在 numpy/_core/fromnumeric.py 中定义底层由PyArray_CountNonzeroC 例程实现np.gradient的修复细节可从当前实现窥见它内部使用二阶精度中心差分计算内部点边界处使用一阶或二阶精度的单侧差分返回值与输入同形状修复涉及无符号边界、非均匀间距varargs等场景下的结果一致性。内存与异常安全修复PR内容#9744在排序函数中检查异常并补充测试#9746修复np.dot对大小为 0 的数组运算时的内存泄漏#9765修复PyArray_CountNonzero未检查异常的问题#9744 与 #9765 同属一类问题C 层的循环中若用户提供的比较函数或迭代过程抛出异常需要显式检查 Python 异常标志并中断否则异常会被吞掉、结果错误甚至崩溃。这类修复通常伴随新增回归测试仓库中numpy/_core/tests/目录即存放这些用例。构建与平台兼容性修复PR内容#9555修复 1.13.x 中distutils.mingw32ccompiler的回归#9558从 IntelFortranCompiler 移除-xhost标志#9747调整 gfortran 版本搜索正则#9580在 WIN32 黑名单中加入hypot与cabs函数#9580 与 Windows 平台相关hypot、cabs等函数在 MSVC 运行库中的行为与 glibc 存在差异NumPy 需要在 Windows 上禁用其内建实现以避免链接错误或结果差异。#9555 则修复了 MinGW 编译器的回归问题确保 Windows 上源码编译路径可用。复杂数学函数与随机模块PR内容源码对应#9764确保_npy_scaled_cexp{,f,l}在需要时被定义定义于 numpy/_core/src/npymath/npy_math_complex.c.src被npy_cpow等复数幂运算在低精度分支中调用同文件 #L636、#L778#9771修复mtrand在 Cython 0.27 下的问题对应numpy/random/mtrand.pyx的兼容性调整_npy_scaled_cexp是 NumPy 自带的缩放复指数实现用于在复数指数运算中避免中间值溢出#9764 修复的是某些构建配置下该符号未被正确导出的链接问题。文档与其他修复PR内容#9557修复 numpy/doc/basics.py 中的 rst 标记#9559移除失效的 docstring 示例source code、png、pdf#9745在versionadded::指令后补加空白使其在文档构建中真正生效#9745 是 Sphinx 文档构建的典型陷阱versionadded::指令要求后跟空行否则指令不会被渲染导致文档中缺失“此特性自某版本新增”的标注。该修复保证了文档构建的正确性。贡献者名单本次发布共有12 位贡献者参与其中首次贡献者有 4 位带 标记Allan Haldane、Brandon Carter、Charles Harris、Eric Wieser、Iryna Shcherbina、James Bourbeau、Jonathan Helmus、Julian Taylor、Matti Picus、Michael Lamparski、Michael Seifert、Ralf Gommers。升级建议与兼容性注意综合以上内容对于 1.13 系列的存量用户本版本的升级要点可归纳为安全优先np.pad的 CVE-2017-12852 修复意味着凡在 1.13.0/1.13.1 上处理不可信输入的代码都应立即升级避免越界内存访问风险性能改善Windows 用户升级后线性代数相关运算将自动切换到 OpenBLAS 后端无需修改代码即可获得通常更好的性能API 兼容本版本不引入新特性、不改变公开 API 签名属于纯缺陷修复发布正常使用np.pad、np.gradient、np.dot、count_nonzero、排序函数等的代码可直接升级构建注意事项若你是从源码自行构建需注意 gfortran 版本搜索、Intel 编译器-xhost标志移除、MinGW 编译器回归修复等构建层面的变化。延伸阅读完整发布说明原文doc/source/release/1.13.2-notes.rst同一系列的发布记录doc/source/release/1.13.0-notes.rst、doc/source/release/1.13.1-notes.rst、doc/source/release/1.13.3-notes.rst本版本修复功能在仓库中的实现位置np.pad、np.gradient、复数指数底层实现赞分享科学计算数据分析【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址https://gitcode.com/gh_mirrors/nu/numpy点击查看免费下载相关推荐NumPy 1.13.3 发布说明深度解读CVE-2017-12852 安全修复与临时变量消除机制剖析NumPy 1.13.3 发布说明深度解读CVE 2017 12852 安全修复与临时变量消除机制剖析 本篇技术指南围绕 NumPy 1.13.3 Relea科学计算数据分析NumPy 1.12.1 发布说明f2py 常量解析回归修复与 15 项关键 Bug 修复全解读NumPy 1.12.1 发布说明f2py 常量解析回归修复与 15 项关键 Bug 修复全解读 NumPy 1.12.1 是 1.12 系列的维护性补丁版本科学计算数据分析NumPy 1.13.3 版本解析CVE-2017-12852 安全修复、临时消除temporary elision与 41 项改动全解读NumPy 1.13.3 版本解析CVE 2017 12852 安全修复、临时消除temporary elision与 41 项改动全解读 导读 本文以科学计算数据分析上一篇如何用Generative-Media-Skills实现多模态媒体生成从图片到视频的完整指南下一篇Website-downloader一键下载完整网站源代码和资源文件的终极工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询