From 480cb385fc3285eaa9b6633fb6e4486f16fd1178 Mon Sep 17 00:00:00 2001 From: Jonathan Giddy Date: Tue, 23 Feb 2016 11:52:47 +0000 Subject: [PATCH] Fix off-by-one error in MIME pattern matching This adds a size to the test webp file, since the error fixed occurs when the test object is the same length as the matched pattern, and is not equal to the pattern. --- components/net/mime_classifier.rs | 16 ++++++++++------ .../unit/net/parsable_mime/image/webp/test.webp | Bin 14 -> 14 bytes 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/components/net/mime_classifier.rs b/components/net/mime_classifier.rs index 4cdc6e45ec33..f9161c4f8a60 100644 --- a/components/net/mime_classifier.rs +++ b/components/net/mime_classifier.rs @@ -294,7 +294,7 @@ impl ByteMatcher { } else if data == self.pattern { Some(self.pattern.len()) } else { - data[..data.len() - self.pattern.len()].iter() + data[..data.len() - self.pattern.len() + 1].iter() .position(|x| !self.leading_ignore.contains(x)) .and_then(|start| if data[start..].iter() @@ -316,15 +316,19 @@ impl MIMEChecker for ByteMatcher { } fn validate(&self) -> Result<(), String> { + if self.pattern.len() == 0 { + return Err(format!( + "Zero length pattern for {}/{}", + self.content_type.0, self.content_type.1 + )) + } if self.pattern.len() != self.mask.len() { - Err(format!( - "Unequal pattern and mask length for {}/{}", + return Err(format!( + "Unequal pattern and mask length for {}/{}", self.content_type.0, self.content_type.1 )) } - else { - Ok(()) - } + Ok(()) } } diff --git a/tests/unit/net/parsable_mime/image/webp/test.webp b/tests/unit/net/parsable_mime/image/webp/test.webp index 5a907eb4ce25534893c05b85cd775bc062ce5360..ad88e62f94c95e3d5039aa9bce0579bb4e689eaf 100755 GIT binary patch literal 14 VcmWIYbaP{4U|f^b)-fUp1n6yO5<