minidom: Remove comments support. Forbid them as per XMPP RFC.
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
parent
c154593fe5
commit
015d0007fc
5 changed files with 13 additions and 76 deletions
|
@ -22,7 +22,3 @@ gitlab = { repository = "xmpp-rs/xmpp-rs" }
|
|||
|
||||
[dependencies]
|
||||
quick-xml = "0.18"
|
||||
|
||||
[features]
|
||||
default = ["comments"]
|
||||
comments = []
|
||||
|
|
|
@ -335,12 +335,9 @@ impl Element {
|
|||
Event::Eof => {
|
||||
return Err(Error::EndOfDocument);
|
||||
}
|
||||
#[cfg(not(feature = "comments"))]
|
||||
Event::Comment { .. } => {
|
||||
return Err(Error::CommentsDisabled);
|
||||
return Err(Error::NoComments);
|
||||
}
|
||||
#[cfg(feature = "comments")]
|
||||
Event::Comment { .. } => (),
|
||||
Event::Text { .. }
|
||||
| Event::End { .. }
|
||||
| Event::CData { .. }
|
||||
|
@ -418,16 +415,7 @@ impl Element {
|
|||
Event::Eof => {
|
||||
break;
|
||||
}
|
||||
#[cfg(not(feature = "comments"))]
|
||||
Event::Comment(_) => return Err(Error::CommentsDisabled),
|
||||
#[cfg(feature = "comments")]
|
||||
Event::Comment(s) => {
|
||||
let comment = reader.decode(&s)?.to_owned();
|
||||
if comment != "" {
|
||||
let current_elem = stack.last_mut().unwrap();
|
||||
current_elem.append_comment_node(comment);
|
||||
}
|
||||
}
|
||||
Event::Comment(_) => return Err(Error::NoComments),
|
||||
Event::Decl { .. } | Event::PI { .. } | Event::DocType { .. } => (),
|
||||
}
|
||||
}
|
||||
|
@ -632,22 +620,6 @@ impl Element {
|
|||
self.children.push(Node::Text(child.into()));
|
||||
}
|
||||
|
||||
/// Appends a comment node to an `Element`.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```rust
|
||||
/// use minidom::Element;
|
||||
///
|
||||
/// let mut elem = Element::bare("node");
|
||||
///
|
||||
/// elem.append_comment_node("comment");
|
||||
/// ```
|
||||
#[cfg(feature = "comments")]
|
||||
pub fn append_comment_node<S: Into<String>>(&mut self, child: S) {
|
||||
self.children.push(Node::Comment(child.into()));
|
||||
}
|
||||
|
||||
/// Appends a node to an `Element`.
|
||||
///
|
||||
/// # Examples
|
||||
|
|
|
@ -36,8 +36,7 @@ pub enum Error {
|
|||
InvalidElement,
|
||||
|
||||
/// An error which is returned when a comment is to be parsed by minidom
|
||||
#[cfg(not(comments))]
|
||||
CommentsDisabled,
|
||||
NoComments,
|
||||
}
|
||||
|
||||
impl StdError for Error {
|
||||
|
@ -49,8 +48,7 @@ impl StdError for Error {
|
|||
Error::EndOfDocument => None,
|
||||
Error::InvalidElementClosed => None,
|
||||
Error::InvalidElement => None,
|
||||
#[cfg(not(comments))]
|
||||
Error::CommentsDisabled => None,
|
||||
Error::NoComments => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -68,10 +66,9 @@ impl std::fmt::Display for Error {
|
|||
write!(fmt, "the XML is invalid, an element was wrongly closed")
|
||||
}
|
||||
Error::InvalidElement => write!(fmt, "the XML element is invalid"),
|
||||
#[cfg(not(comments))]
|
||||
Error::CommentsDisabled => write!(
|
||||
Error::NoComments => write!(
|
||||
fmt,
|
||||
"a comment has been found even though comments are disabled by feature"
|
||||
"a comment has been found even though comments are forbidden"
|
||||
),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
use crate::element::Element;
|
||||
use crate::error::Error;
|
||||
|
||||
use quick_xml::Reader;
|
||||
|
||||
|
@ -35,21 +36,6 @@ fn build_test_tree() -> Element {
|
|||
root
|
||||
}
|
||||
|
||||
#[cfg(feature = "comments")]
|
||||
const COMMENT_TEST_STRING: &'static str = r#"<root><!--This is a child.--><child attr="val"><!--This is a grandchild.--><grandchild/></child></root>"#;
|
||||
|
||||
#[cfg(feature = "comments")]
|
||||
fn build_comment_test_tree() -> Element {
|
||||
let mut root = Element::builder("root").build();
|
||||
root.append_comment_node("This is a child.");
|
||||
let mut child = Element::builder("child").attr("attr", "val").build();
|
||||
child.append_comment_node("This is a grandchild.");
|
||||
let grand_child = Element::builder("grandchild").build();
|
||||
child.append_child(grand_child);
|
||||
root.append_child(child);
|
||||
root
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn reader_works() {
|
||||
let mut reader = Reader::from_str(TEST_STRING);
|
||||
|
@ -265,25 +251,13 @@ fn namespace_inherited_prefixed2() {
|
|||
assert_eq!(child.ns(), Some("jabber:client".to_owned()));
|
||||
}
|
||||
|
||||
#[cfg(feature = "comments")]
|
||||
#[test]
|
||||
fn read_comments() {
|
||||
let mut reader = Reader::from_str(COMMENT_TEST_STRING);
|
||||
assert_eq!(
|
||||
Element::from_reader(&mut reader).unwrap(),
|
||||
build_comment_test_tree()
|
||||
);
|
||||
}
|
||||
|
||||
#[cfg(feature = "comments")]
|
||||
#[test]
|
||||
fn write_comments() {
|
||||
let root = build_comment_test_tree();
|
||||
let mut writer = Vec::new();
|
||||
{
|
||||
root.write_to(&mut writer).unwrap();
|
||||
}
|
||||
assert_eq!(String::from_utf8(writer).unwrap(), COMMENT_TEST_STRING);
|
||||
fn fail_comments() {
|
||||
let elem: Result<Element, Error> = "<foo><!-- bar --></foo>".parse();
|
||||
match elem {
|
||||
Err(Error::NoComments) => (),
|
||||
_ => panic!(),
|
||||
};
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
@ -160,7 +160,6 @@ impl TryFrom<Element> for Body {
|
|||
match child {
|
||||
Node::Element(child) => children.push(Child::Tag(Tag::try_from(child.clone())?)),
|
||||
Node::Text(text) => children.push(Child::Text(text.clone())),
|
||||
Node::Comment(_) => unimplemented!(), // XXX: remove!
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -309,7 +308,6 @@ impl TryFrom<Element> for Tag {
|
|||
match child {
|
||||
Node::Element(child) => children.push(Child::Tag(Tag::try_from(child.clone())?)),
|
||||
Node::Text(text) => children.push(Child::Text(text.clone())),
|
||||
Node::Comment(_) => unimplemented!(), // XXX: remove!
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue