Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit18da44f

Browse files
committed
Updated failing XML parser tests.
1 parent3d3e578 commit18da44f

File tree

13 files changed

+351
-332
lines changed

13 files changed

+351
-332
lines changed

‎boost/network/auth/sasl.hpp‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,17 @@ template <
1919
>
2020
classbasic_sasl {
2121

22+
structanonymous {};
23+
structplain {};
24+
structdigest_md5 {};
25+
2226
public:
2327

24-
// basic_sasl(PLAIN);
28+
explicitbasic_sasl(anonymous);
29+
30+
explicitbasic_sasl(plain);
2531

26-
// basic_sasl(DIGEST);
32+
explicitbasic_sasl(digest_md5);
2733

2834
};
2935
}// namespace auth

‎boost/network/detail/xml_wrappers/parser_backends/expat/element_parser.hpp‎

Lines changed: 43 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@
1010

1111
#include<boost/network/traits/string.hpp>
1212
#include<boost/network/detail/xml_wrappers/element.hpp>
13+
#include<boost/noncopyable.hpp>
1314
#include<expat.h>
1415
#include<cstring>
16+
#include<stack>
1517

1618

1719
namespaceboost {
@@ -20,19 +22,16 @@ namespace detail {
2022
template<
2123
classTag
2224
>
23-
classbasic_expat_element_parser {
25+
classbasic_expat_element_parser: boost::noncopyable{
2426
public:
2527

2628
typedeftypename string<Tag>::type string_type;
2729

2830
typedef basic_element<Tag> element_type;
2931

30-
basic_expat_element_parser() {
31-
parser_ =XML_ParserCreate(NULL);
32-
// handle the case where the parser is NULL
33-
element_ =0;
34-
depth_ =0;
35-
32+
basic_expat_element_parser()
33+
: parser_(XML_ParserCreate(NULL)), depth_(0) {
34+
assert(parser_);
3635
XML_SetUserData(parser_,this);
3736
XML_SetElementHandler(parser_, start_element, end_element);
3837
XML_SetCharacterDataHandler(parser_, cdata);
@@ -41,13 +40,22 @@ class basic_expat_element_parser {
4140
~basic_expat_element_parser() {
4241
XML_ParserFree(parser_);
4342
}
44-
43+
4544
boolfeed(const string_type &chunk) {
46-
returnfeed(chunk,0);
45+
while (!elements_.empty()) {
46+
elements_.pop();
47+
}
48+
elements_.push(0);
49+
depth_ =0;
50+
returnXML_Parse(parser_, chunk.c_str(), chunk.size(),0) !=0;
4751
}
4852

49-
boolfeed(const string_type &chunk, element_type *element) {
50-
element_ = element;
53+
boolfeed(const string_type &chunk, element_type &element) {
54+
while (!elements_.empty()) {
55+
elements_.pop();
56+
}
57+
elements_.push(&element);
58+
depth_ =0;
5159
returnXML_Parse(parser_, chunk.c_str(), chunk.size(),0) !=0;
5260
}
5361

@@ -80,25 +88,34 @@ class basic_expat_element_parser {
8088
const XML_Char **attrs) {
8189
basic_expat_element_parser<Tag> *parser
8290
=static_cast<basic_expat_element_parser<Tag> *>(userdata);
83-
84-
if (parser->depth_ ==1) {
85-
set_name(parser->element_, name);
86-
set_attributes(parser->element_, attrs);
91+
92+
if (!parser->elements_.top()) {
93+
return;
8794
}
88-
elseif (parser->depth_ >1) {
95+
96+
if (parser->depth_ >0) {
8997
element_type *child =new element_type;
90-
set_name(child, name);
91-
set_attributes(child, attrs);
92-
parser->element_->add_child(child);
98+
parser->elements_.top()->add_child(child);
99+
parser->elements_.push(child);
93100
}
94-
101+
set_name(parser->elements_.top(), name);
102+
set_attributes(parser->elements_.top(), attrs);
103+
95104
++parser->depth_;
96105
}
97106

98107
staticvoidend_element(void *userdata,
99108
const XML_Char *name) {
100109
basic_expat_element_parser<Tag> *parser
101110
=static_cast<basic_expat_element_parser<Tag> *>(userdata);
111+
112+
if (!parser->elements_.top()) {
113+
return;
114+
}
115+
116+
if (parser->depth_ >0) {
117+
parser->elements_.pop();
118+
}
102119

103120
--parser->depth_;
104121
}
@@ -108,13 +125,17 @@ class basic_expat_element_parser {
108125
int len) {
109126
basic_expat_element_parser<Tag> *parser
110127
=static_cast<basic_expat_element_parser<Tag> *>(userdata);
128+
129+
if (!parser->elements_.top()) {
130+
return;
131+
}
111132

112-
parser->element_->add_child(
133+
parser->elements_.top()->add_child(
113134
newelement_type(typenameelement_type::text(),string_type(s, s + len)));
114135
}
115136

116137
XML_Parser parser_;
117-
element_type *element_;
138+
std::stack<element_type *> elements_;
118139
int depth_;
119140

120141
};

‎boost/network/detail/xml_wrappers/parser_backends/expat/stanza_parser.hpp‎

Lines changed: 0 additions & 124 deletions
This file was deleted.

‎boost/network/detail/xml_wrappers/parser_backends/libxml2/element_parser.hpp‎

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include<boost/network/detail/xml_wrappers/element.hpp>
1313
#include<libxml/parser.h>
1414
#include<libxml/tree.h>
15+
#include<stack>
1516

1617

1718
namespaceboost {
@@ -34,7 +35,6 @@ class basic_libxml2_element_parser {
3435
handlers_.endElement = end_element;
3536
handlers_.characters = characters;
3637
depth_ =0;
37-
element_ =0;
3838

3939
context_ =xmlCreatePushParserCtxt(&handlers_,
4040
this,0,0,0);
@@ -46,11 +46,20 @@ class basic_libxml2_element_parser {
4646
}
4747

4848
boolfeed(const string_type &chunk) {
49-
returnfeed(chunk,0);
49+
while (!elements_.empty()) {
50+
elements_.pop();
51+
}
52+
elements_.push(0);
53+
depth_ =0;
54+
returnxmlParseChunk(context_, chunk.c_str(), chunk.size(),0);
5055
}
5156

52-
boolfeed(const string_type &chunk, element_type *element) {
53-
element_ = element;
57+
boolfeed(const string_type &chunk, element_type &element) {
58+
while (!elements_.empty()) {
59+
elements_.pop();
60+
}
61+
elements_.push(&element);
62+
depth_ =0;
5463
returnxmlParseChunk(context_, chunk.c_str(), chunk.size(),0);
5564
}
5665

@@ -83,16 +92,17 @@ class basic_libxml2_element_parser {
8392
basic_libxml2_element_parser<Tag> *parser
8493
=static_cast<basic_libxml2_element_parser<Tag> *>(userdata);
8594

86-
if (parser->depth_ ==1) {
87-
set_name(parser->element_, name);
88-
set_attributes(parser->element_, attrs);
95+
if (!parser->elements_.top()) {
96+
return;
8997
}
90-
elseif (parser->depth_ >1) {
98+
99+
elseif (parser->depth_ >0) {
91100
element_type *child =new element_type;
92-
set_name(child, name);
93-
set_attributes(child, attrs);
94-
parser->element_->add_child(child);
101+
parser->elements_.top()->add_child(child);
102+
parser->elements_.push(child);
95103
}
104+
set_name(parser->elements_.top(), name);
105+
set_attributes(parser->elements_.top(), attrs);
96106

97107
++parser->depth_;
98108
}
@@ -101,6 +111,14 @@ class basic_libxml2_element_parser {
101111
const xmlChar *name) {
102112
basic_libxml2_element_parser<Tag> *parser
103113
=static_cast<basic_libxml2_element_parser<Tag> *>(userdata);
114+
115+
if (!parser->elements_.top()) {
116+
return;
117+
}
118+
119+
if (parser->depth_ >0) {
120+
parser->elements_.pop();
121+
}
104122

105123
--parser->depth_;
106124
}
@@ -110,14 +128,18 @@ class basic_libxml2_element_parser {
110128
int len) {
111129
basic_libxml2_element_parser<Tag> *parser
112130
=static_cast<basic_libxml2_element_parser<Tag> *>(userdata);
131+
132+
if (!parser->elements_.top()) {
133+
return;
134+
}
113135

114-
parser->element_->add_child(
136+
parser->elements_.top()->add_child(
115137
newelement_type(typenameelement_type::text(),string_type(s, s + len)));
116138
}
117139

118140
xmlParserCtxtPtr context_;
119141
xmlSAXHandler handlers_;
120-
element_type *element_;
142+
std::stack<element_type *> elements_;
121143
int depth_;
122144

123145
};

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp