jingle, jingle_s5b: Add missing checks for unknown attributes and children.

Emmanuel Gil Peyrot created

Change summary

src/jingle.rs     | 4 ++++
src/jingle_s5b.rs | 1 +
2 files changed, 5 insertions(+)

Detailed changes

src/jingle.rs 🔗

@@ -120,6 +120,7 @@ impl TryFrom<Element> for Content {
 
     fn try_from(elem: Element) -> Result<Content, Error> {
         check_self!(elem, "content", JINGLE);
+        check_no_unknown_attributes!(elem, "content", ["creator", "disposition", "name", "senders"]);
 
         let mut content = Content {
             creator: get_attr!(elem, "creator", required),
@@ -146,6 +147,8 @@ impl TryFrom<Element> for Content {
                     return Err(Error::ParseError("Content must not have more than one security."));
                 }
                 content.security = Some(child.clone());
+            } else {
+                return Err(Error::ParseError("Unknown child in content element."));
             }
         }
         Ok(content)
@@ -341,6 +344,7 @@ impl TryFrom<Element> for Jingle {
 
     fn try_from(root: Element) -> Result<Jingle, Error> {
         check_self!(root, "jingle", JINGLE, "Jingle");
+        check_no_unknown_attributes!(root, "Jingle", ["action", "initiator", "responder", "sid"]);
 
         let mut jingle = Jingle {
             action: get_attr!(root, "action", required),

src/jingle_s5b.rs 🔗

@@ -111,6 +111,7 @@ impl TryFrom<Element> for Transport {
 
     fn try_from(elem: Element) -> Result<Transport, Error> {
         check_self!(elem, "transport", JINGLE_S5B);
+        check_no_unknown_attributes!(elem, "transport", ["sid", "dstaddr", "mode"]);
         let sid = get_attr!(elem, "sid", required);
         let dstaddr = get_attr!(elem, "dstaddr", optional);
         let mode = get_attr!(elem, "mode", default);