XMLNode::InsertAfterChild dereferences NULL when addThis is already afterThis's next sibling
評価
調査の方向性
tinyxml2.cpp の 1014~1021 行付近にある XMLNode::InsertAfterChild から始めます。issue では、兄弟ノードへのポインターを更新する前に addThis のリンクを解除することがクラッシュの原因とされています。子ノード挿入に関する既存のテストを確認し、提示された 2 つの子ノードの例に対応する回帰テストを追加します。すでに afterThis の直後にあるノードを挿入しても安全に戻り、回帰テストが成功すれば完了です。
索引モデルが issue の本文から書いたものです。
説明
InsertAfterChild(afterThis, addThis) crashes when addThis is already
immediately after afterThis and is the last child. master @ 8224e42.
#include "tinyxml2/tinyxml2.h"
using namespace tinyxml2;
int main() {
XMLDocument doc;
doc.Parse("<r><a/><b/></r>");
XMLElement* r = doc.RootElement();
XMLNode* a = r->FirstChildElement("a");
XMLNode* b = r->FirstChildElement("b");
r->InsertAfterChild(a, b); // SEGV
}
AddressSanitizer: SEGV on unknown address 0x000000000048
#0 tinyxml2::XMLNode::InsertAfterChild(...) tinyxml2.cpp:1021
0x48 is the offset of _prev.
Root cause. The guard at 1014 is evaluated before InsertChildPreamble
unlinks addThis, and that unlink invalidates it:
if ( afterThis->_next == 0 ) // 1014: a->_next is b, not NULL -- does not fire
return InsertEndChild( addThis );
InsertChildPreamble( addThis ); // 1018: Unlink(b) -> a->_next becomes NULL
addThis->_next = afterThis->_next; // 1020: NULL
afterThis->_next->_prev = addThis; // 1021: dereferences NULL
Fix. Early return when the node is already in place:
if ( afterThis->_next == addThis )
return addThis;
- 主要言語
- C++
- スター
- 5.8k
- フォーク
- 2k
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
leethomason/tinyxml2 のほかの issue
-
CDATA output containing ]]> is not well-formed XML対応中かも @bconnnnn が 20 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
leethomason/tinyxml2#1097 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
leethomason/tinyxml2#923 · コメント 2 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
leethomason/tinyxml2#914 ·
-
New release requestオープン
難易度 2/5 1時間未満 初心者へのやさしさ 15/100
leethomason/tinyxml2#1087 · コメント 4 件 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 18/100
leethomason/tinyxml2#1085 · コメント 1 件 ·
leethomason/tinyxml2 の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 3 日以内に返信
-
status:needs-triage
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
PX4/PX4-Autopilot#29496 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 66/100
madskristensen/FileIcons#385 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
microsoft/SysmonCommon#26 ·
-
難易度 1/5 1時間未満 初心者へのやさしさ 90/100
espressif/esp-matter#1913 ·