Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ffi: pass non-empty slice when haystack is empty #43

Merged
merged 1 commit into from
Jul 30, 2024
Merged

Commits on Jul 30, 2024

  1. ffi: pass non-empty slice when haystack is empty

    To work around likely bugs in (older versions of) PCRE2. Namely, at one
    point, PCRE2 would dereference the haystack pointer even when the length
    was zero.
    
    This was reported in #10 and we worked around this in #11 by passing a
    pointer to a const `&[]`, with the (erroneous) presumption that this
    would be a valid pointer to dereference. In retrospect though, this was
    a little silly, because you should never be dereferencing a pointer to
    an empty slice. It's not valid. Alas, at that time, Rust did actually
    hand you a valid pointer that could be dereferenced. But [this
    PR][rust-pull] changed that. And thus, we're back to where we started:
    handing buggy versions of PCRE2 a zero length haystack with a dangling
    pointer.
    
    So we fix this once and for all by passing a slice of length 1, but with
    a haystack length of 0, to the PCRE2 search routine when searching an
    empty haystack. This will guarantee the provision of a dereferencable
    pointer should PCRE2 decide to dereference it.
    
    Fixes #42
    
    [rust-pull]: rust-lang/rust#123936
    BurntSushi committed Jul 30, 2024
    Configuration menu
    Copy the full SHA
    2effc28 View commit details
    Browse the repository at this point in the history