[CVE-2021-30560] Fix use-after-free in xsltApplyTemplates 05/286805/1 accepted/tizen_6.5_base accepted/tizen_6.5_base_tool tizen_6.5_base accepted/tizen/6.5/base/20230714.002548 accepted/tizen/6.5/base/tool/20230116.011932 submit/tizen_6.5_base/20230113.060317
authorNick Wellnhofer <wellnhofer@aevum.de>
Sat, 12 Jun 2021 18:02:53 +0000 (20:02 +0200)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Fri, 13 Jan 2023 05:25:56 +0000 (14:25 +0900)
commit60d2ff2426a15f0bbde2efcaa80cae1b94b3cbc2
tree8c9651dd078214865239b83091775ec151ec34f1
parent52575733efa1b63a3f5fa615821c38c54387d409
[CVE-2021-30560] Fix use-after-free in xsltApplyTemplates

xsltApplyTemplates without a select expression could delete nodes in
the source document.

1. Text nodes with strippable whitespace

Whitespace from input documents is already stripped, so there's no
need to strip it again. Under certain circumstances, xsltApplyTemplates
could be fooled into deleting text nodes that are still referenced,
resulting in a use-after-free.

2. The DTD

The DTD was only unlinked, but there's no good reason to do this just
now. Maybe it was meant as a micro-optimization.

3. Unknown nodes

Useless and dangerous as well, especially with XInclude nodes.
See https://gitlab.gnome.org/GNOME/libxml2/-/issues/268

Simply stop trying to uselessly delete nodes when applying a template.
This part of the code is probably a leftover from a time where
xsltApplyStripSpaces wasn't implemented yet. Also note that
xsltApplyTemplates with a select expression never tried to delete
nodes.

Also stop xsltDefaultProcessOneNode from deleting nodes for the same
reasons.

This fixes CVE-2021-30560.

Change-Id: I8562896b0a268507c9315006c1b8ae3e559e877f
Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
libxslt/transform.c