1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
From 3efa07ad277efe5c1d11a2ef2b907c095f68bbef Mon Sep 17 00:00:00 2001
From: Ben Boeckel <ben.boeckel@kitware.com>
Date: Mon, 15 Apr 2024 22:22:22 -0400
Subject: [PATCH] vtkXMLDataParser: track `AppendedData` state explicitly
Newer `libexpat` doesn't like being given the appended data after the
artificially ended document anymore. Avoid pushing it through to its
parser.
(cherry picked from commit db8f9efca220c9d16a30958e179abae3379d0011)
Fixes: #19258
---
IO/XMLParser/vtkXMLDataParser.cxx | 6 +++++-
IO/XMLParser/vtkXMLDataParser.h | 3 +++
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/IO/XMLParser/vtkXMLDataParser.cxx b/IO/XMLParser/vtkXMLDataParser.cxx
index 1f6006d37c2..7d38092fdd7 100644
--- a/IO/XMLParser/vtkXMLDataParser.cxx
+++ b/IO/XMLParser/vtkXMLDataParser.cxx
@@ -36,6 +36,7 @@ vtkXMLDataParser::vtkXMLDataParser()
this->RootElement = nullptr;
this->AppendedDataPosition = 0;
this->AppendedDataMatched = 0;
+ this->AppendedDataFound = false;
this->DataStream = nullptr;
this->InlineDataStream = vtkBase64InputStream::New();
this->AppendedDataStream = vtkBase64InputStream::New();
@@ -88,6 +89,7 @@ void vtkXMLDataParser::PrintSelf(ostream& os, vtkIndent indent)
{
this->Superclass::PrintSelf(os, indent);
os << indent << "AppendedDataPosition: " << this->AppendedDataPosition << "\n";
+ os << indent << "AppendedDataFound: " << this->AppendedDataFound << "\n";
if (this->RootElement)
{
this->RootElement->PrintXML(os, indent);
@@ -214,7 +216,7 @@ int vtkXMLDataParser::ParsingComplete()
// If we have reached the appended data section, we stop parsing.
// This prevents the XML parser from having to walk over the entire
// appended data section.
- if (this->AppendedDataPosition)
+ if (this->AppendedDataPosition || this->AppendedDataFound)
{
return 1;
}
@@ -433,6 +435,8 @@ int vtkXMLDataParser::ParseBuffer(const char* buffer, unsigned int count)
{
return 0;
}
+
+ this->AppendedDataFound = true;
}
return 1;
diff --git a/IO/XMLParser/vtkXMLDataParser.h b/IO/XMLParser/vtkXMLDataParser.h
index 1504a4d400b..142bf28327d 100644
--- a/IO/XMLParser/vtkXMLDataParser.h
+++ b/IO/XMLParser/vtkXMLDataParser.h
@@ -204,6 +204,9 @@ protected:
// How much of the string "<AppendedData" has been matched in input.
int AppendedDataMatched;
+ // Whether AppendedData has been dealt with or not.
+ bool AppendedDataFound;
+
// The byte order of the binary input.
int ByteOrder;
--
GitLab
|