forked from mirrors/gecko-dev
		
	This updates binjs_meta and thus weedle, bindgen and thus clang-sys transitively, and the mime / mime_guess crate and thus unicase and version-check. Differential Revision: https://phabricator.services.mozilla.com/D66282 --HG-- rename : third_party/rust/lmdb-rkv-sys/tests/fixtures/testdb/lock.mdb => third_party/rust/lmdb-rkv-sys/tests/fixtures/testdb-32/lock.mdb rename : third_party/rust/mime_guess/Cargo.lock => third_party/rust/nom/Cargo.lock rename : third_party/rust/nom/src/branch.rs => third_party/rust/nom/src/branch/macros.rs rename : third_party/rust/nom/src/sequence.rs => third_party/rust/nom/src/sequence/macros.rs rename : third_party/rust/rkv-0.10.2/.cargo-checksum.json => third_party/rust/rkv-0.10.4/.cargo-checksum.json rename : third_party/rust/rkv-0.10.2/CODE_OF_CONDUCT.md => third_party/rust/rkv-0.10.4/CODE_OF_CONDUCT.md rename : third_party/rust/rkv-0.10.2/Cargo.toml => third_party/rust/rkv-0.10.4/Cargo.toml rename : third_party/rust/rkv-0.10.2/LICENSE => third_party/rust/rkv-0.10.4/LICENSE rename : third_party/rust/rkv-0.10.2/examples/README.md => third_party/rust/rkv-0.10.4/examples/README.md rename : third_party/rust/rkv-0.10.2/examples/iterator.rs => third_party/rust/rkv-0.10.4/examples/iterator.rs rename : third_party/rust/rkv-0.10.2/examples/simple-store.rs => third_party/rust/rkv-0.10.4/examples/simple-store.rs rename : third_party/rust/rkv-0.10.2/run-all-examples.sh => third_party/rust/rkv-0.10.4/run-all-examples.sh rename : third_party/rust/rkv-0.10.2/src/bin/dump.rs => third_party/rust/rkv-0.10.4/src/bin/dump.rs rename : third_party/rust/rkv-0.10.2/src/bin/rand.rs => third_party/rust/rkv-0.10.4/src/bin/rand.rs rename : third_party/rust/rkv-0.10.2/src/env.rs => third_party/rust/rkv-0.10.4/src/env.rs rename : third_party/rust/rkv-0.10.2/src/error.rs => third_party/rust/rkv-0.10.4/src/error.rs rename : third_party/rust/rkv-0.10.2/src/lib.rs => third_party/rust/rkv-0.10.4/src/lib.rs rename : third_party/rust/rkv-0.10.2/src/manager.rs => third_party/rust/rkv-0.10.4/src/manager.rs rename : third_party/rust/rkv-0.10.2/src/migrate.rs => third_party/rust/rkv-0.10.4/src/migrate.rs rename : third_party/rust/rkv-0.10.2/src/readwrite.rs => third_party/rust/rkv-0.10.4/src/readwrite.rs rename : third_party/rust/rkv-0.10.2/src/store.rs => third_party/rust/rkv-0.10.4/src/store.rs rename : third_party/rust/rkv-0.10.2/src/store/integer.rs => third_party/rust/rkv-0.10.4/src/store/integer.rs rename : third_party/rust/rkv-0.10.2/src/store/integermulti.rs => third_party/rust/rkv-0.10.4/src/store/integermulti.rs rename : third_party/rust/rkv-0.10.2/src/store/multi.rs => third_party/rust/rkv-0.10.4/src/store/multi.rs rename : third_party/rust/rkv-0.10.2/src/store/single.rs => third_party/rust/rkv-0.10.4/src/store/single.rs rename : third_party/rust/rkv-0.10.2/src/value.rs => third_party/rust/rkv-0.10.4/src/value.rs rename : third_party/rust/rkv-0.10.2/tests/integer-store.rs => third_party/rust/rkv-0.10.4/tests/integer-store.rs rename : third_party/rust/rkv-0.10.2/tests/manager.rs => third_party/rust/rkv-0.10.4/tests/manager.rs rename : third_party/rust/rkv-0.10.2/tests/multi-integer-store.rs => third_party/rust/rkv-0.10.4/tests/multi-integer-store.rs rename : third_party/rust/rkv-0.10.2/tests/test_txn.rs => third_party/rust/rkv-0.10.4/tests/test_txn.rs extra : moz-landing-system : lando
		
			
				
	
	
		
			139 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
#![cfg_attr(feature = "cargo-clippy", allow(unreadable_literal))]
 | 
						|
#![cfg(target_pointer_width = "64")]
 | 
						|
 | 
						|
#[macro_use]
 | 
						|
extern crate nom;
 | 
						|
 | 
						|
use nom::{Err, Needed};
 | 
						|
#[cfg(feature = "alloc")]
 | 
						|
use nom::number::streaming::be_u64;
 | 
						|
 | 
						|
// Parser definition
 | 
						|
 | 
						|
// We request a length that would trigger an overflow if computing consumed + requested
 | 
						|
named!(parser01<&[u8],()>,
 | 
						|
    do_parse!(
 | 
						|
        hdr: take!(1) >>
 | 
						|
        data: take!(18446744073709551615) >>
 | 
						|
        ({
 | 
						|
          let _ = hdr;
 | 
						|
          let _ = data;
 | 
						|
          ()
 | 
						|
        })
 | 
						|
    )
 | 
						|
);
 | 
						|
 | 
						|
// We request a length that would trigger an overflow if computing consumed + requested
 | 
						|
named!(parser02<&[u8],(&[u8],&[u8])>,
 | 
						|
    tuple!(take!(1),take!(18446744073709551615))
 | 
						|
);
 | 
						|
 | 
						|
#[test]
 | 
						|
fn overflow_incomplete_do_parse() {
 | 
						|
  assert_eq!(
 | 
						|
    parser01(&b"3"[..]),
 | 
						|
    Err(Err::Incomplete(Needed::Size(18446744073709551615)))
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn overflow_incomplete_tuple() {
 | 
						|
  assert_eq!(
 | 
						|
    parser02(&b"3"[..]),
 | 
						|
    Err(Err::Incomplete(Needed::Size(18446744073709551615)))
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
#[cfg(feature = "alloc")]
 | 
						|
fn overflow_incomplete_length_bytes() {
 | 
						|
  named!(multi<&[u8], Vec<&[u8]> >, many0!( length_data!(be_u64) ) );
 | 
						|
 | 
						|
  // Trigger an overflow in length_data
 | 
						|
  assert_eq!(
 | 
						|
    multi(&b"\x00\x00\x00\x00\x00\x00\x00\x01\xaa\xff\xff\xff\xff\xff\xff\xff\xff\xaa"[..]),
 | 
						|
    Err(Err::Incomplete(Needed::Size(18446744073709551615)))
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
#[cfg(feature = "alloc")]
 | 
						|
fn overflow_incomplete_many0() {
 | 
						|
  named!(multi<&[u8], Vec<&[u8]> >, many0!( length_data!(be_u64) ) );
 | 
						|
 | 
						|
  // Trigger an overflow in many0
 | 
						|
  assert_eq!(
 | 
						|
    multi(&b"\x00\x00\x00\x00\x00\x00\x00\x01\xaa\xff\xff\xff\xff\xff\xff\xff\xef\xaa"[..]),
 | 
						|
    Err(Err::Incomplete(Needed::Size(18446744073709551599)))
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
#[cfg(feature = "alloc")]
 | 
						|
fn overflow_incomplete_many1() {
 | 
						|
  named!(multi<&[u8], Vec<&[u8]> >, many1!( length_data!(be_u64) ) );
 | 
						|
 | 
						|
  // Trigger an overflow in many1
 | 
						|
  assert_eq!(
 | 
						|
    multi(&b"\x00\x00\x00\x00\x00\x00\x00\x01\xaa\xff\xff\xff\xff\xff\xff\xff\xef\xaa"[..]),
 | 
						|
    Err(Err::Incomplete(Needed::Size(18446744073709551599)))
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
#[cfg(feature = "alloc")]
 | 
						|
fn overflow_incomplete_many_till() {
 | 
						|
  named!(multi<&[u8], (Vec<&[u8]>, &[u8]) >, many_till!( length_data!(be_u64), tag!("abc") ) );
 | 
						|
 | 
						|
  // Trigger an overflow in many_till
 | 
						|
  assert_eq!(
 | 
						|
    multi(&b"\x00\x00\x00\x00\x00\x00\x00\x01\xaa\xff\xff\xff\xff\xff\xff\xff\xef\xaa"[..]),
 | 
						|
    Err(Err::Incomplete(Needed::Size(18446744073709551599)))
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
#[cfg(feature = "alloc")]
 | 
						|
fn overflow_incomplete_many_m_n() {
 | 
						|
  named!(multi<&[u8], Vec<&[u8]> >, many_m_n!(2, 4, length_data!(be_u64) ) );
 | 
						|
 | 
						|
  // Trigger an overflow in many_m_n
 | 
						|
  assert_eq!(
 | 
						|
    multi(&b"\x00\x00\x00\x00\x00\x00\x00\x01\xaa\xff\xff\xff\xff\xff\xff\xff\xef\xaa"[..]),
 | 
						|
    Err(Err::Incomplete(Needed::Size(18446744073709551599)))
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
#[cfg(feature = "alloc")]
 | 
						|
fn overflow_incomplete_count() {
 | 
						|
  named!(counter<&[u8], Vec<&[u8]> >, count!( length_data!(be_u64), 2 ) );
 | 
						|
 | 
						|
  assert_eq!(
 | 
						|
    counter(&b"\x00\x00\x00\x00\x00\x00\x00\x01\xaa\xff\xff\xff\xff\xff\xff\xff\xef\xaa"[..]),
 | 
						|
    Err(Err::Incomplete(Needed::Size(18446744073709551599)))
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
#[cfg(feature = "alloc")]
 | 
						|
fn overflow_incomplete_length_count() {
 | 
						|
  use nom::number::streaming::be_u8;
 | 
						|
  named!(multi<&[u8], Vec<&[u8]> >, length_count!( be_u8, length_data!(be_u64) ) );
 | 
						|
 | 
						|
  assert_eq!(
 | 
						|
    multi(&b"\x04\x00\x00\x00\x00\x00\x00\x00\x01\xaa\xff\xff\xff\xff\xff\xff\xff\xee\xaa"[..]),
 | 
						|
    Err(Err::Incomplete(Needed::Size(18446744073709551598)))
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
#[cfg(feature = "alloc")]
 | 
						|
fn overflow_incomplete_length_data() {
 | 
						|
  named!(multi<&[u8], Vec<&[u8]> >, many0!( length_data!(be_u64) ) );
 | 
						|
 | 
						|
  assert_eq!(
 | 
						|
    multi(&b"\x00\x00\x00\x00\x00\x00\x00\x01\xaa\xff\xff\xff\xff\xff\xff\xff\xff\xaa"[..]),
 | 
						|
    Err(Err::Incomplete(Needed::Size(18446744073709551615)))
 | 
						|
  );
 | 
						|
}
 |