Skip to content

Commit df6d5d2

Browse files
committed
fix panic when multibyte character is present after value
1 parent e4333c1 commit df6d5d2

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

src/parser.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ impl<'toks, 'input> JSON5Parser<'toks, 'input> {
538538
None => {}
539539
Some(span) => {
540540
if span.1 != TokType::EOF {
541-
return Err(self.make_error(format!("Unexpected {:?} token after value", span.1), span.0 - 1))
541+
return Err(self.make_error(format!("Unexpected {:?} token after value", span.1), span.0))
542542
}
543543
}
544544
}
@@ -600,6 +600,12 @@ mod tests {
600600
use crate::parser::JSONValue::*;
601601
use super::*;
602602

603+
#[test]
604+
fn test_fuzz_1() {
605+
let res = from_str("0xA18 {9");
606+
assert!(res.is_err());
607+
}
608+
603609
#[test]
604610
fn test_from_bytes() {
605611
let res = from_bytes(b"{}").unwrap();

src/rt/parser.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,7 @@ impl<'toks, 'input> JSON5Parser<'toks, 'input> {
656656
None => {}
657657
Some(span) => {
658658
if span.1 != TokType::EOF {
659-
return Err(self.make_error(format!("Unexpected {:?} token after value", span.1), span.0 - 1))
659+
return Err(self.make_error(format!("Unexpected {:?} token after value", span.1), span.0))
660660
}
661661
}
662662
}
@@ -704,7 +704,15 @@ pub fn from_str(source: &str) -> Result<JSONText, ParsingError> {
704704
#[cfg(test)]
705705
mod tests {
706706
use crate::tokenize::Tokenizer;
707+
707708
use super::*;
709+
710+
#[test]
711+
fn test_fuzz_1() {
712+
let res = from_str("0xA18 {9");
713+
assert!(res.is_err());
714+
}
715+
708716
#[test]
709717
fn test_foo() {
710718
let res = from_str("{}").unwrap();

0 commit comments

Comments
 (0)