From a16cd01a2c8ab2de6443e19eda2438a4e38b4cef Mon Sep 17 00:00:00 2001 From: Nikita Vilunov Date: Thu, 21 Sep 2023 17:00:53 +0200 Subject: [PATCH] improve validation --- src/protos/xmpp/bind.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/protos/xmpp/bind.rs b/src/protos/xmpp/bind.rs index 4186049..ebabff6 100644 --- a/src/protos/xmpp/bind.rs +++ b/src/protos/xmpp/bind.rs @@ -106,16 +106,19 @@ impl FromXml for BindRequest { match event { Event::Start(bytes) if bytes.name().0 == b"resource" => { let (namespace, event) = yield; - if let Event::Text(text) = event { - resource = Some(text.as_bytes().into()); - } - let (namespace, event) = yield; - if let Event::End(_) = event { - } else { + let Event::Text(text) = event else { return Err(ffail!("Unexpected XML event: {event:?}")); + }; + resource = Some(text.as_bytes().into()); + let (namespace, event) = yield; + let Event::End(bytes) = event else { + return Err(ffail!("Unexpected XML event: {event:?}")); + }; + if bytes.name().0 != b"resource" { + return Err(ffail!("Unexpected XML tag: {:?}", bytes.name())); } } - Event::End(bytes_) => { + Event::End(bytes) if bytes.name().0 == BindRequest::NAME.as_bytes() => { break; } _ => return Err(ffail!("Unexpected XML event: {event:?}")),