Skip to content

Instantly share code, notes, and snippets.

@xeioex
Created July 25, 2025 22:56
Show Gist options
  • Save xeioex/87f3ed8fed420578c993a917e90390a5 to your computer and use it in GitHub Desktop.
Save xeioex/87f3ed8fed420578c993a917e90390a5 to your computer and use it in GitHub Desktop.
diff --git a/src/http/request.rs b/src/http/request.rs
index f8dead2b..7b06c3f1 100644
--- a/src/http/request.rs
+++ b/src/http/request.rs
@@ -465,20 +465,33 @@ impl<'a> Iterator for NgxListIterator<'a> {
type Item = (&'a str, &'a str);
fn next(&mut self) -> Option<Self::Item> {
- let part = self.part.as_mut()?;
- if self.i >= part.arr.len() {
- if let Some(next_part_raw) = unsafe { part.raw.next.as_ref() } {
- // loop back
- *part = next_part_raw.into();
- self.i = 0;
- } else {
- self.part = None;
- return None;
+ loop {
+ let part = self.part.as_mut()?;
+ if self.i >= part.arr.len() {
+ if let Some(next_part_raw) = unsafe { part.raw.next.as_ref() } {
+ // loop back
+ *part = next_part_raw.into();
+ self.i = 0;
+ } else {
+ self.part = None;
+ return None;
+ }
+ }
+ let header = &part.arr[self.i];
+ self.i += 1;
+
+ let key_bytes = header.key.as_ref();
+ let value_bytes = header.value.as_ref();
+
+ match (std::str::from_utf8(key_bytes), std::str::from_utf8(value_bytes)) {
+ (Ok(key), Ok(value)) => {
+ return Some((key, value));
+ },
+ _ => {
+ continue;
+ }
}
}
- let header = &part.arr[self.i];
- self.i += 1;
- Some((header.key.to_str(), header.value.to_str()))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment