代码拉取完成,页面将自动刷新
同步操作将从 OpenHarmony/third_party_libxml2 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
From 250faf3c832d998baa559ca1a1c61935235aba20 Mon Sep 17 00:00:00 2001
From: Nick Wellnhofer <wellnhofer@aevum.de>
Date: Thu, 20 Apr 2023 12:35:21 +0200
Subject: [PATCH] parser: Fix regression in xmlParserNodeInfo accounting
Commit 62150ed2 broke begin_pos and begin_line when extra node info was
recorded.
Fixes #523.
Reference:https://github.com/GNOME/libxml2/commit/250faf3c832d998baa559ca1a1c61935235aba20
Conflict:NA
---
SAX2.c | 20 ++------------------
parser.c | 53 +++++++++++++++++++++++++----------------------------
2 files changed, 27 insertions(+), 46 deletions(-)
diff --git a/SAX2.c b/SAX2.c
index 916e974..822b975 100644
--- a/SAX2.c
+++ b/SAX2.c
@@ -1783,13 +1783,6 @@ xmlSAX2EndElement(void *ctx, const xmlChar *name ATTRIBUTE_UNUSED)
xmlGenericError(xmlGenericErrorContext, "SAX.xmlSAX2EndElement(%s)\n", name);
#endif
- /* Capture end position and add node */
- if (cur != NULL && ctxt->record_info) {
- ctxt->nodeInfo->end_pos = ctxt->input->cur - ctxt->input->base;
- ctxt->nodeInfo->end_line = ctxt->input->line;
- ctxt->nodeInfo->node = cur;
- xmlParserAddNodeInfo(ctxt, ctxt->nodeInfo);
- }
ctxt->nodemem = -1;
#ifdef LIBXML_VALID_ENABLED
@@ -2433,24 +2426,15 @@ xmlSAX2EndElementNs(void *ctx,
const xmlChar * URI ATTRIBUTE_UNUSED)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlParserNodeInfo node_info;
- xmlNodePtr cur;
if (ctx == NULL) return;
- cur = ctxt->node;
- /* Capture end position and add node */
- if ((ctxt->record_info) && (cur != NULL)) {
- node_info.end_pos = ctxt->input->cur - ctxt->input->base;
- node_info.end_line = ctxt->input->line;
- node_info.node = cur;
- xmlParserAddNodeInfo(ctxt, &node_info);
- }
ctxt->nodemem = -1;
#ifdef LIBXML_VALID_ENABLED
if (ctxt->validate && ctxt->wellFormed &&
ctxt->myDoc && ctxt->myDoc->intSubset)
- ctxt->valid &= xmlValidateOneElement(&ctxt->vctxt, ctxt->myDoc, cur);
+ ctxt->valid &= xmlValidateOneElement(&ctxt->vctxt, ctxt->myDoc,
+ ctxt->node);
#endif /* LIBXML_VALID_ENABLED */
/*
diff --git a/parser.c b/parser.c
index a4c9fb2..94a6298 100644
--- a/parser.c
+++ b/parser.c
@@ -10025,7 +10025,7 @@ xmlParseElementStart(xmlParserCtxtPtr ctxt) {
const xmlChar *URI = NULL;
xmlParserNodeInfo node_info;
int line, tlen = 0;
- xmlNodePtr ret;
+ xmlNodePtr cur;
int nsNr = ctxt->nsNr;
if (((unsigned int) ctxt->nameNr > xmlParserMaxDepth) &&
@@ -10067,7 +10067,7 @@ xmlParseElementStart(xmlParserCtxtPtr ctxt) {
return(-1);
}
nameNsPush(ctxt, name, prefix, URI, line, ctxt->nsNr - nsNr);
- ret = ctxt->node;
+ cur = ctxt->node;
#ifdef LIBXML_VALID_ENABLED
/*
@@ -10100,17 +10100,23 @@ xmlParseElementStart(xmlParserCtxtPtr ctxt) {
spacePop(ctxt);
if (nsNr != ctxt->nsNr)
nsPop(ctxt, ctxt->nsNr - nsNr);
- if ( ret != NULL && ctxt->record_info ) {
- node_info.end_pos = ctxt->input->consumed +
- (CUR_PTR - ctxt->input->base);
- node_info.end_line = ctxt->input->line;
- node_info.node = ret;
- xmlParserAddNodeInfo(ctxt, &node_info);
+ if (cur != NULL && ctxt->record_info) {
+ node_info.node = cur;
+ node_info.end_pos = ctxt->input->consumed +
+ (CUR_PTR - ctxt->input->base);
+ node_info.end_line = ctxt->input->line;
+ xmlParserAddNodeInfo(ctxt, &node_info);
}
return(1);
}
if (RAW == '>') {
NEXT1;
+ if (cur != NULL && ctxt->record_info) {
+ node_info.node = cur;
+ node_info.end_pos = 0;
+ node_info.end_line = 0;
+ xmlParserAddNodeInfo(ctxt, &node_info);
+ }
} else {
xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_GT_REQUIRED,
"Couldn't find end of Start Tag %s line %d\n",
@@ -10124,17 +10130,6 @@ xmlParseElementStart(xmlParserCtxtPtr ctxt) {
spacePop(ctxt);
if (nsNr != ctxt->nsNr)
nsPop(ctxt, ctxt->nsNr - nsNr);
-
- /*
- * Capture end position and add node
- */
- if ( ret != NULL && ctxt->record_info ) {
- node_info.end_pos = ctxt->input->consumed +
- (CUR_PTR - ctxt->input->base);
- node_info.end_line = ctxt->input->line;
- node_info.node = ret;
- xmlParserAddNodeInfo(ctxt, &node_info);
- }
return(-1);
}
@@ -10149,8 +10144,7 @@ xmlParseElementStart(xmlParserCtxtPtr ctxt) {
*/
static void
xmlParseElementEnd(xmlParserCtxtPtr ctxt) {
- xmlParserNodeInfo node_info;
- xmlNodePtr ret = ctxt->node;
+ xmlNodePtr cur = ctxt->node;
if (ctxt->nameNr <= 0)
return;
@@ -10168,14 +10162,17 @@ xmlParseElementEnd(xmlParserCtxtPtr ctxt) {
#endif /* LIBXML_SAX1_ENABLED */
/*
- * Capture end position and add node
+ * Capture end position
*/
- if ( ret != NULL && ctxt->record_info ) {
- node_info.end_pos = ctxt->input->consumed +
- (CUR_PTR - ctxt->input->base);
- node_info.end_line = ctxt->input->line;
- node_info.node = ret;
- xmlParserAddNodeInfo(ctxt, &node_info);
+ if (cur != NULL && ctxt->record_info) {
+ xmlParserNodeInfoPtr node_info;
+
+ node_info = (xmlParserNodeInfoPtr) xmlParserFindNodeInfo(ctxt, cur);
+ if (node_info != NULL) {
+ node_info->end_pos = ctxt->input->consumed +
+ (CUR_PTR - ctxt->input->base);
+ node_info->end_line = ctxt->input->line;
+ }
}
}
--
2.27.0
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。