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

Indexed DB: Ensure large explicit keys consistently max out generator #5065

Merged
merged 1 commit into from Mar 7, 2017

Conversation

chromium-wpt-export-bot
Copy link
Collaborator

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}

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}
@wpt-pr-bot
Copy link
Collaborator

@w3c-bots
Copy link

w3c-bots commented Mar 7, 2017

View the complete job log.

Firefox (nightly channel)

Testing web-platform-tests at revision f457da9
Using browser at version BuildID 20170306110339; SourceStamp 966464a68a2cb3ca1125808e34abb5c1d34e3797
Starting 10 test iterations
All results were stable

All results

2 tests ran
/IndexedDB/keygenerator-explicit.html
Subtest Results Messages
OK
Key generator vs. explicit key 53 bits PASS
Key generator vs. explicit key greater than 53 bits, less than 64 bits PASS
Key generator vs. explicit key greater than 53 bits, less than 64 bits (negative) PASS
Key generator vs. explicit key 63 bits FAIL assert_unreached: put should fail Reached unreachable code
Key generator vs. explicit key 63 bits (negative) PASS
Key generator vs. explicit key 64 bits FAIL assert_unreached: put should fail Reached unreachable code
Key generator vs. explicit key 64 bits (negative) PASS
Key generator vs. explicit key greater than 64 bits, but still finite FAIL assert_unreached: put should fail Reached unreachable code
Key generator vs. explicit key greater than 64 bits, but still finite (negative) PASS
Key generator vs. explicit key equal to Infinity FAIL assert_unreached: put should fail Reached unreachable code
Key generator vs. explicit key equal to -Infinity PASS
/IndexedDB/keygenerator-inject.html
Subtest Results Messages
OK
Key is injected into value - single segment path PASS
Key is injected into value - multi-segment path PASS
Key is injected into value - multi-segment path, partially populated PASS
put() throws if key cannot be injected - single segment path PASS
put() throws if key cannot be injected - multi-segment path PASS

@w3c-bots
Copy link

w3c-bots commented Mar 7, 2017

View the complete job log.

Chrome (unstable channel)

Testing web-platform-tests at revision f457da9
Using browser at version 58.0.3029.6 dev
Starting 10 test iterations
All results were stable

All results

2 tests ran
/IndexedDB/keygenerator-explicit.html
Subtest Results Messages
OK
Key generator vs. explicit key 53 bits PASS
Key generator vs. explicit key greater than 53 bits, less than 64 bits PASS
Key generator vs. explicit key greater than 53 bits, less than 64 bits (negative) PASS
Key generator vs. explicit key 63 bits FAIL assert_unreached: put should fail Reached unreachable code
Key generator vs. explicit key 63 bits (negative) PASS
Key generator vs. explicit key 64 bits FAIL assert_unreached: put should fail Reached unreachable code
Key generator vs. explicit key 64 bits (negative) PASS
Key generator vs. explicit key greater than 64 bits, but still finite FAIL assert_unreached: put should fail Reached unreachable code
Key generator vs. explicit key greater than 64 bits, but still finite (negative) PASS
Key generator vs. explicit key equal to Infinity FAIL assert_unreached: put should fail Reached unreachable code
Key generator vs. explicit key equal to -Infinity PASS
/IndexedDB/keygenerator-inject.html
Subtest Results Messages
OK
Key is injected into value - single segment path PASS
Key is injected into value - multi-segment path PASS
Key is injected into value - multi-segment path, partially populated PASS
put() throws if key cannot be injected - single segment path PASS
put() throws if key cannot be injected - multi-segment path PASS

@chromium-wpt-export-bot chromium-wpt-export-bot merged commit b4d12c9 into master Mar 7, 2017
@chromium-wpt-export-bot chromium-wpt-export-bot deleted the chromium-export-try branch March 7, 2017 22:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants