Skip to content

Commit 50dbefc

Browse files
committed
fix: diff fragment vulnerability
1 parent 69e5c1e commit 50dbefc

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

packages/nerv/src/lifecycle.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ function getFragmentHostNode (children: VNode[]): Node | null {
186186
} else if (isComposite(child) && child.dom == null) {
187187
return getFragmentHostNode(child.component._rendered)
188188
}
189-
return child.dom
189+
return child != null ? child.dom : null
190190
}
191191

192192
export function reRenderComponent (
@@ -274,7 +274,7 @@ export function updateComponent (component, isForce = false) {
274274
let parentDom = lastRendered.dom && lastRendered.dom.parentNode
275275
if (isArray(lastRendered)) {
276276
const hostNode = getFragmentHostNode(lastRendered)
277-
if (hostNode) {
277+
if (hostNode != null) {
278278
parentDom = (lastRendered as any).dom = hostNode.parentNode
279279
}
280280
}

packages/nerv/src/vdom/patch.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,11 @@ export function patch (
8888
parentNode.removeChild(lastDom[i])
8989
}
9090
} else if (parentNode !== null) {
91-
parentNode.replaceChild(newDom, lastDom)
91+
if (lastDom != null) {
92+
parentNode.replaceChild(newDom, lastDom)
93+
} else {
94+
parentNode.appendChild(newDom)
95+
}
9296
}
9397
}
9498
return newDom

0 commit comments

Comments
 (0)