Codec error handling callback should return newpos > start

未关闭
#96,872 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
35/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
冷清
技术栈
python
领域
backend

调研方向

首先阅读 PEP 293,并跟踪 issue 中描述的 encoder/decoder error-callback 行为。调查返回的 newpos 值等于或小于 start 时的处理方式,然后为报告的循环和无效位置情况添加覆盖。完成的标准是这些 callbacks 不再导致处理不前进或无限缓冲。

由索引模型根据 Issue 内容生成。

描述

topic-unicode type-feature

According to PEP 293, the codec error handling callback should either raise an exception or return a pair (replacement, newpos). newpos specifies a new position within object, where the encoder/decoder will continue encoding/decoding. Negative values for newpos are treated as being relative to end of object. PEP 293 does not specify the bound of newpos, and this is a problem.

If newpos == start, the codec will not advance. If replacement is empty, it will just hang in an infinite loop, calling the callback again and again. If replacement is not empty, it will additionally add it in an internal buffer, and finally, after long time, you will get a MemoryError. If newpos < start, the behavior may be even more weird.

Before fixing other errors in #81000 it even caused a crash, but now it is only an infinite loop.

I propose to limit the returning value by range [start+1, len(object)].

@malemburg, @doerwalter, @vstinner

主要语言
Python
星标
77.2k
派生
36k
平均合并
1 天 9 小时
30 天内合并 PR
558

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

python/cpython 的其他 Issue

查看 python/cpython 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。