Skip to content

Forward-reverse word iterator mismatch #20

Description

@Manishearth

Found by cargo-fuzz.

On the string literal "j\u{FFFD}jjjjjjjjjjj\u{0489}\u{200D}\u{2764}jjjjjjjjj\u{0489}j\u{FFFD}\u{FFFD}\u{FFFD}\"jjjjjj\"jjD\u{0409}\u{0489}0\\f\u{FFFD}".

Base64: agBqampqampqampqatKJ4oCN4p2kampqampqampq0olqAAAAImpqampqaiJqakTQidKJMAwA

As byte array: [0x6a,0x0,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0xd2,0x89,0xe2,0x80,0x8d,0xe2,0x9d,0xa4,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0xd2,0x89,0x6a,0x0,0x0,0x0,0x22,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x22,0x6a,0x6a,0x44,0xd0,0x89,0xd2,0x89,0x30,0xc,0x0]

fn main() {
    let s = "j\u{FFFD}jjjjjjjjjjj\u{0489}\u{200D}\u{2764}jjjjjjjjj\u{0489}j\u{FFFD}\u{FFFD}\u{FFFD}\"jjjjjj\"jjD\u{0409}\u{0489}0\\f\u{FFFD}";
    let forward = s.split_word_bounds().collect::<Vec<_>>();
    let forward_reversed = forward.into_iter().rev().collect::<Vec<_>>();
    let reverse = s.split_word_bounds().rev().collect::<Vec<_>>();
    assert_eq!(forward_reversed, reverse);
}

cc @mbrubeck @kwantam

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions