#5041(PR #5223)实施过程中的范围外发现,只记录不修、不指派。发现者(os-dev)已实测,证据基础同 PR #5223 的探针方法。 ## 两个形状 1. **`$in` / `$nin` 列表里的非 `$field` 对象成员**:`{ status: { $in: ['a', { foo: 1 }] } }` —— 编译通过、执行、**静默零行**(该成员绑定为无法命中的值)。PR #5223 已拦下列表成员是 `{$field: ...}` 的情形(按成员序号点名拒绝),但**其它对象成员**仍走旧路。 2. **LIKE 族(`$contains`/`$startsWith`/`$endsWith`…)遇对象比较值**:被 `String()` 成 `'[object Object]'` 参与匹配 —— 语义上永假,**静默零行**。 ## 为什么当时没有一并修(记录 dev 的边界判断,供接手者参考) - 两者都**不抛错**,与 #5041 实测的「裸 TypeError」不同类:是「过滤器被无意义地应用」,不是「过滤器无法应用」; - 失败方向 **fail-closed**(收窄结果集,不存在权限绕过),风险级别低于 #5041; - 拓宽守卫会改变今天不崩溃的路径的行为,超出 #5041 的测量范围 —— 按范围纪律停手立案。 ## 与既有账的关系 同属 #3948 / #4209 点名的「静默错误答案」类;修法大概率是把 PR #5223 在三个比较发射器上装的形状守卫拓宽到这两类(同一收口点、同一 `INVALID_FILTER` 信封),但需要先测量 `$in` 数组成员与 LIKE 比较值的**合法**形状全集,避免误伤。 Refs:#5041、PR #5223(探针与发射器清单)、#5222(`$field` 的 SQL 实现,v18)、#3948、#4209。
#5041(PR #5223)实施过程中的范围外发现,只记录不修、不指派。发现者(os-dev)已实测,证据基础同 PR #5223 的探针方法。
两个形状
$in/$nin列表里的非$field对象成员:{ status: { $in: ['a', { foo: 1 }] } }—— 编译通过、执行、静默零行(该成员绑定为无法命中的值)。PR fix(driver-sql):$field跨字段比较按 ADR-0112 响亮拒绝,不再抛裸 TypeError (#5041) #5223 已拦下列表成员是{$field: ...}的情形(按成员序号点名拒绝),但其它对象成员仍走旧路。$contains/$startsWith/$endsWith…)遇对象比较值:被String()成'[object Object]'参与匹配 —— 语义上永假,静默零行。为什么当时没有一并修(记录 dev 的边界判断,供接手者参考)
$field跨字段比较:spec 声明 + cel-to-filter 产出,但无任何 SQL 执行层实现 —— enforce-or-remove 裁决位 #5041 实测的「裸 TypeError」不同类:是「过滤器被无意义地应用」,不是「过滤器无法应用」;$field跨字段比较:spec 声明 + cel-to-filter 产出,但无任何 SQL 执行层实现 —— enforce-or-remove 裁决位 #5041;$field跨字段比较:spec 声明 + cel-to-filter 产出,但无任何 SQL 执行层实现 —— enforce-or-remove 裁决位 #5041 的测量范围 —— 按范围纪律停手立案。与既有账的关系
同属 #3948 / #4209 点名的「静默错误答案」类;修法大概率是把 PR #5223 在三个比较发射器上装的形状守卫拓宽到这两类(同一收口点、同一
INVALID_FILTER信封),但需要先测量$in数组成员与 LIKE 比较值的合法形状全集,避免误伤。Refs:#5041、PR #5223(探针与发射器清单)、#5222(
$field的 SQL 实现,v18)、#3948、#4209。