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
Indexed DB: Ensure large explicit keys consistently max out generator #5065
Conversation
Background: Stores can have a key generator which generates successive numeric keys. Storing a record with an explicit numeric key adjusts they key generator to produce values above the explicit key. Once the generator hits 2^53 it stops generating new keys (since that's the maximum integer uniquely representable as a JS number). Chrome's logic for certain values above this limit was "wonky". Values above 2^53 would max out the generator. Values above 2^63 and Infinity would be ignored and not adjust the generator, due to relying on undefined double->int64_t casting behavior. Fix to always max out the generator for large values. Also adds web-platform-tests - other implementations are wonky too. :( Also adds some missing test coverage for key injection cases. Spec discussion: w3c/IndexedDB#147 BUG=691754 Review-Url: https://codereview.chromium.org/2735213002 Cr-Commit-Position: refs/heads/master@{#455256}
Notifying @chunywang, @dumbmatter, @inexorabletash, @odinho, @yunxiaoxie, @zhaozihao, and @zqzhang. (Learn how reviewing works.) |
Firefox (nightly channel)Testing web-platform-tests at revision f457da9 All results2 tests ran/IndexedDB/keygenerator-explicit.html
/IndexedDB/keygenerator-inject.html
|
Chrome (unstable channel)Testing web-platform-tests at revision f457da9 All results2 tests ran/IndexedDB/keygenerator-explicit.html
/IndexedDB/keygenerator-inject.html
|
Background: Stores can have a key generator which generates successive
numeric keys. Storing a record with an explicit numeric key adjusts
they key generator to produce values above the explicit key. Once the
generator hits 2^53 it stops generating new keys (since that's the
maximum integer uniquely representable as a JS number).
Chrome's logic for certain values above this limit was "wonky". Values
above 2^53 would max out the generator. Values above 2^63 and Infinity
would be ignored and not adjust the generator, due to relying on
undefined double->int64_t casting behavior.
Fix to always max out the generator for large values. Also adds
web-platform-tests - other implementations are wonky too. :(
Also adds some missing test coverage for key injection cases.
Spec discussion: w3c/IndexedDB#147
BUG=691754
Review-Url: https://codereview.chromium.org/2735213002
Cr-Commit-Position: refs/heads/master@{#455256}