• William Chargin's avatar
    ensureSlash: Fix accidental string-to-NaN coercion (#4424) · 3aaddefc
    William Chargin authored
    Summary:
    The `hasSlash` method uses `path.substr(path, path.length - 1)` to
    remove the last character from `path`. Clearly, the first parameter is
    suspect; it should be `0`. The code works as written, but only very
    accidentally: the first parameter is coerced by `ToNumber` to `NaN`,
    which is then coerced by `ToInteger` to `+0`, per [the spec][1].
    
    [1]: https://www.ecma-international.org/ecma-262/6.0/#sec-string.prototype.substr
    
    Test Plan:
    Reading the spec should be sufficient. To verify in the Real World:
    ```js
    const path = "has-slash-but-does-not-need-slash/"
    const a = path.substr(path, path.length - 1);
    const b = path.substr(0, path.length - 1);
    console.log(a === b);  // true
    console.log(a);        // has-slash-but-does-not-need-slash
    ```
    
    wchargin-branch: ensureslash-accidental-coercion
    3aaddefc