Skip to content

Commit

Permalink
Test that envelopes not starting with OP_FALSE are ignored (ordinals#…
Browse files Browse the repository at this point in the history
  • Loading branch information
casey authored Jan 9, 2023
1 parent 59eb0f0 commit fef1413
Showing 1 changed file with 30 additions and 21 deletions.
51 changes: 30 additions & 21 deletions src/inscription.rs
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ impl<'a> InscriptionParser<'a> {
mod tests {
use super::*;

fn container(payload: &[&[u8]]) -> Witness {
fn envelope(payload: &[&[u8]]) -> Witness {
let mut builder = script::Builder::new()
.push_opcode(opcodes::OP_FALSE)
.push_opcode(opcodes::all::OP_IF);
Expand Down Expand Up @@ -330,7 +330,7 @@ mod tests {
#[test]
fn duplicate_field() {
assert_eq!(
InscriptionParser::parse(&container(&[
InscriptionParser::parse(&envelope(&[
b"ord",
&[1],
b"text/plain;charset=utf-8",
Expand All @@ -346,7 +346,7 @@ mod tests {
#[test]
fn valid() {
assert_eq!(
InscriptionParser::parse(&container(&[
InscriptionParser::parse(&envelope(&[
b"ord",
&[1],
b"text/plain;charset=utf-8",
Expand All @@ -360,7 +360,7 @@ mod tests {
#[test]
fn valid_with_unknown_tag() {
assert_eq!(
InscriptionParser::parse(&container(&[
InscriptionParser::parse(&envelope(&[
b"ord",
&[1],
b"text/plain;charset=utf-8",
Expand All @@ -376,7 +376,7 @@ mod tests {
#[test]
fn no_content_tag() {
assert_eq!(
InscriptionParser::parse(&container(&[b"ord", &[1], b"text/plain;charset=utf-8"])),
InscriptionParser::parse(&envelope(&[b"ord", &[1], b"text/plain;charset=utf-8"])),
Ok(Inscription {
content_type: Some(b"text/plain;charset=utf-8".to_vec()),
content: None,
Expand All @@ -387,7 +387,7 @@ mod tests {
#[test]
fn no_content_type() {
assert_eq!(
InscriptionParser::parse(&container(&[b"ord", &[], b"foo"])),
InscriptionParser::parse(&envelope(&[b"ord", &[], b"foo"])),
Ok(Inscription {
content_type: None,
content: Some(b"foo".to_vec()),
Expand All @@ -398,7 +398,7 @@ mod tests {
#[test]
fn valid_content_in_multiple_pushes() {
assert_eq!(
InscriptionParser::parse(&container(&[
InscriptionParser::parse(&envelope(&[
b"ord",
&[1],
b"text/plain;charset=utf-8",
Expand All @@ -413,20 +413,15 @@ mod tests {
#[test]
fn valid_content_in_zero_pushes() {
assert_eq!(
InscriptionParser::parse(&container(&[
b"ord",
&[1],
b"text/plain;charset=utf-8",
&[]
])),
InscriptionParser::parse(&envelope(&[b"ord", &[1], b"text/plain;charset=utf-8", &[]])),
Ok(inscription("text/plain;charset=utf-8", "")),
);
}

#[test]
fn valid_content_in_multiple_empty_pushes() {
assert_eq!(
InscriptionParser::parse(&container(&[
InscriptionParser::parse(&envelope(&[
b"ord",
&[1],
b"text/plain;charset=utf-8",
Expand Down Expand Up @@ -511,7 +506,7 @@ mod tests {
#[test]
fn invalid_utf8_does_not_render_inscription_invalid() {
assert_eq!(
InscriptionParser::parse(&container(&[
InscriptionParser::parse(&envelope(&[
b"ord",
&[1],
b"text/plain;charset=utf-8",
Expand Down Expand Up @@ -544,18 +539,32 @@ mod tests {
);
}

#[test]
fn no_op_false() {
let script = script::Builder::new()
.push_opcode(opcodes::all::OP_IF)
.push_slice("ord".as_bytes())
.push_opcode(opcodes::all::OP_ENDIF)
.into_script();

assert_eq!(
InscriptionParser::parse(&Witness::from_vec(vec![script.into_bytes(), vec![]])),
Err(InscriptionError::NoInscription)
);
}

#[test]
fn no_content() {
assert_eq!(
InscriptionParser::parse(&container(&[])),
InscriptionParser::parse(&envelope(&[])),
Err(InscriptionError::NoInscription)
);
}

#[test]
fn wrong_magic_number() {
assert_eq!(
InscriptionParser::parse(&container(&[b"foo"])),
InscriptionParser::parse(&envelope(&[b"foo"])),
Err(InscriptionError::NoInscription),
);
}
Expand All @@ -569,7 +578,7 @@ mod tests {
previous_output: OutPoint::null(),
script_sig: Script::new(),
sequence: Sequence(0),
witness: container(&[b"ord", &[1], b"text/plain;charset=utf-8", &[], b"ord"]),
witness: envelope(&[b"ord", &[1], b"text/plain;charset=utf-8", &[], b"ord"]),
}],
output: Vec::new(),
};
Expand Down Expand Up @@ -615,7 +624,7 @@ mod tests {
#[test]
fn inscribe_png() {
assert_eq!(
InscriptionParser::parse(&container(&[b"ord", &[1], b"image/png", &[], &[1; 100]])),
InscriptionParser::parse(&envelope(&[b"ord", &[1], b"image/png", &[], &[1; 100]])),
Ok(inscription("image/png", [1; 100])),
);
}
Expand Down Expand Up @@ -711,7 +720,7 @@ mod tests {
#[test]
fn unknown_odd_fields_are_ignored() {
assert_eq!(
InscriptionParser::parse(&container(&[b"ord", &[3], &[0]])),
InscriptionParser::parse(&envelope(&[b"ord", &[3], &[0]])),
Ok(Inscription {
content_type: None,
content: None,
Expand All @@ -722,7 +731,7 @@ mod tests {
#[test]
fn unknown_even_fields_are_invalid() {
assert_eq!(
InscriptionParser::parse(&container(&[b"ord", &[2], &[0]])),
InscriptionParser::parse(&envelope(&[b"ord", &[2], &[0]])),
Err(InscriptionError::UnrecognizedEvenField),
);
}
Expand Down

0 comments on commit fef1413

Please sign in to comment.