You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

xercesc::DOMLSParserImpl::doctypeDecl内外部实体参数颠倒问题问询

Xercesc-3.1.4中DOMLSParserImpl::doctypeDecl参数颠倒问题解答

问题确认

你遇到的是xercesc-3.1.4版本的已知参数传递bug:DOMLSParserImpl::doctypeDecl方法的has_internal和has_external参数实际传入值与方法签名语义完全颠倒——处理带外部实体的文档时,has_internal=true且has_external=false;处理内部实体时则相反。

问题背景与验证

在使用依赖xercesc-3.1.4的libxsd-3.3.0修复XXE漏洞时,重写doctypeDecl方法调整拦截逻辑后发现:原本预期拦截外部实体的if(hase)不生效,改用if(hasi)才会触发异常,日志验证也确认了参数值颠倒的现象。

是否为已知问题?

这是xercesc 3.1.x版本的特定bug,并非通用安全漏洞,后续发布的3.2.0及更高版本已经修复了这个参数传递错误。不少使用旧版本的开发者都遇到过相同问题,属于版本兼容性问题。

临时解决方案

针对xercesc-3.1.4,若仅需拦截外部实体,需颠倒判断逻辑:

void SecureDOMParser::doctypeDecl (const DTDElementDecl& e,
             const XMLCh* const    pub_id,
             const XMLCh* const    sys_id,
             const bool            hasi,
             const bool            hase)
{
  if (hasi)   // 因参数颠倒,用hasi判断外部实体
    ThrowXMLwithMemMgr(RuntimeException, XMLExcepts::Gen_NoDTDValidator, fMemoryManager);

  DOMLSParserImpl::doctypeDecl (e, pub_id, sys_id, hasi, hase);
}

长期解决方案是将xercesc升级到3.2.0及以上版本,彻底修复该参数传递错误。

内容的提问来源于stack exchange,提问作者neutrino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 10:07:21