Closed Bug 1565515 Opened 4 months ago Closed 4 months ago

Array keys with a intermediate 0-length binary element trigger an assertion

Categories

(Core :: Storage: IndexedDB, defect, P2)

defect

Tracking

()

RESOLVED FIXED
mozilla70
Tracking Status
firefox70 --- fixed

People

(Reporter: sg, Assigned: sg)

Details

Attachments

(12 files)

47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review

When keys containing an intermediate 0-length binary element (e.g. [Uint8Array.from([]), Uint8Array.from([1])]) are processed (encoded and decoded again), an assertion is triggered:

 1:32.88 GECKO(1765) Assertion failure: pos >= BufferEnd(), at /home/osboxes/work/mozilla-unified/dom/indexedDB/Key.cpp:793
 1:37.00 GECKO(1765) #01: mozilla::dom::indexedDB::Key::ToJSVal(JSContext*, JS::MutableHandle<JS::Value>) const (/home/osboxes/work/mozilla-unified/dom/indexedDB/Key.cpp:793)
 1:37.20 GECKO(1765) #02: mozilla::dom::indexedDB::(anonymous namespace)::ResultHelper::GetResult(JSContext*, mozilla::dom::indexedDB::Key const*, JS::MutableHandle<JS::Value>) (/home/osboxes/work/mozilla-unified/dom/indexedDB/ActorsChild.cpp:425)
 1:37.20 GECKO(1765) #03: mozilla::dom::indexedDB::(anonymous namespace)::ResultHelper::GetResult(JSContext*, JS::MutableHandle<JS::Value>) (/home/osboxes/work/mozilla-unified/dom/indexedDB/ActorsChild.cpp:330)
 1:37.20 GECKO(1765) #04: mozilla::dom::IDBRequest::SetResultCallback(mozilla::dom::IDBRequest::ResultCallback*) (/home/osboxes/work/mozilla-unified/dom/indexedDB/IDBRequest.cpp:296)
 1:37.21 GECKO(1765) #05: mozilla::dom::indexedDB::(anonymous namespace)::DispatchSuccessEvent(mozilla::dom::indexedDB::(anonymous namespace)::ResultHelper*, mozilla::dom::Event*) (/home/osboxes/work/mozilla-unified/dom/indexedDB/ActorsChild.cpp:742)
 1:37.21 GECKO(1765) #06: mozilla::dom::indexedDB::BackgroundRequestChild::HandleResponse(mozilla::dom::indexedDB::Key const&) (/home/osboxes/work/mozilla-unified/dom/indexedDB/ActorsChild.cpp:2634)
 1:37.22 GECKO(1765) #07: mozilla::dom::indexedDB::BackgroundRequestChild::Recv__delete__(mozilla::dom::indexedDB::RequestResponse const&) (/home/osboxes/work/mozilla-unified/dom/indexedDB/ActorsChild.cpp:2841)
 1:39.50 GECKO(1765) #08: non-virtual thunk to mozilla::dom::indexedDB::BackgroundRequestChild::Recv__delete__(mozilla::dom::indexedDB::RequestResponse const&) (-:?)
 1:39.57 GECKO(1765) #09: mozilla::dom::indexedDB::PBackgroundIDBRequestChild::OnMessageReceived(IPC::Message const&) (/home/osboxes/work/mozilla-unified/obj-x86_64-pc-linux-gnu/ipc/ipdl/PBackgroundIDBRequestChild.cpp:133)
 1:39.64 GECKO(1765) #10: mozilla::ipc::PBackgroundChild::OnMessageReceived(IPC::Message const&) (/home/osboxes/work/mozilla-unified/obj-x86_64-pc-linux-gnu/ipc/ipdl/PBackgroundChild.cpp:4717)
 1:39.74 GECKO(1765) #11: mozilla::ipc::MessageChannel::DispatchAsyncMessage(mozilla::ipc::ActorLifecycleProxy*, IPC::Message const&) (/home/osboxes/work/mozilla-unified/ipc/glue/MessageChannel.cpp:2158)
 1:39.79 GECKO(1765) #12: mozilla::ipc::MessageChannel::DispatchMessage(IPC::Message&&) (-:?)
 1:39.85 GECKO(1765) #13: mozilla::ipc::MessageChannel::RunMessage(mozilla::ipc::MessageChannel::MessageTask&) (-:?)
 1:39.86 GECKO(1765) #14: mozilla::ipc::MessageChannel::MessageTask::Run() (/home/osboxes/work/mozilla-unified/ipc/glue/MessageChannel.cpp:1971)
 1:39.94 GECKO(1765) #15: nsThread::ProcessNextEvent(bool, bool*) (/home/osboxes/work/mozilla-unified/xpcom/threads/nsThread.cpp:1227)
 1:39.95 GECKO(1765) #16: NS_ProcessNextEvent(nsIThread*, bool) (/home/osboxes/work/mozilla-unified/xpcom/threads/nsThreadUtils.cpp:486)
 1:40.12 GECKO(1765) #17: mozilla::dom::WorkerPrivate::DoRunLoop(JSContext*) (/home/osboxes/work/mozilla-unified/dom/workers/WorkerPrivate.cpp:2815)
 1:40.28 GECKO(1765) #18: mozilla::dom::workerinternals::(anonymous namespace)::WorkerThreadPrimaryRunnable::Run() (/home/osboxes/work/mozilla-unified/dom/workers/RuntimeService.cpp:2339)
 1:40.28 GECKO(1765) #19: nsThread::ProcessNextEvent(bool, bool*) (/home/osboxes/work/mozilla-unified/xpcom/threads/nsThread.cpp:1227)
 1:40.28 GECKO(1765) #20: NS_ProcessNextEvent(nsIThread*, bool) (/home/osboxes/work/mozilla-unified/xpcom/threads/nsThreadUtils.cpp:486)
 1:40.29 GECKO(1765) #21: mozilla::ipc::MessagePumpForNonMainThreads::Run(base::MessagePump::Delegate*) (/home/osboxes/work/mozilla-unified/ipc/glue/MessagePump.cpp:334)
 1:40.33 GECKO(1765) #22: MessageLoop::RunInternal() (/home/osboxes/work/mozilla-unified/ipc/chromium/src/base/message_loop.cc:315)
 1:40.35 GECKO(1765) #23: MessageLoop::RunHandler() (/home/osboxes/work/mozilla-unified/ipc/chromium/src/base/message_loop.cc:309)
 1:40.36 GECKO(1765) #24: MessageLoop::Run() (/home/osboxes/work/mozilla-unified/ipc/chromium/src/base/message_loop.cc:290)
 1:40.39 GECKO(1765) #25: nsThread::ThreadFunc(void*) (/home/osboxes/work/mozilla-unified/xpcom/threads/nsThread.cpp:461)
 1:40.47 GECKO(1765) #26: _pt_root (/home/osboxes/work/mozilla-unified/nsprpub/pr/src/pthreads/ptthread.c:204)
 1:40.56 GECKO(1765) #27: start_thread (pthread_create.c:?)

The comment referenced the former 3 prefix used for strings, but this is
no longer correct for strings (which now use a 0x30) prefix, and the
function has been generalized to also work for binaries, and got
a parameter aType specifying the prefix. Updated the comment accordingly.

Depends on D37849

Attachment #9077657 - Attachment description: Bug 1565515 - added handling of ArrayBuffer/binary keys to compareKeys functions r=asuth → Bug 1565515 - added handling of ArrayBuffer/binary keys to compareKeys functions r=ttung,janv,asuth
Priority: -- → P2
Attachment #9077653 - Attachment description: Bug 1565515 - DecodeBinary violates contract for 0-sized binary r=asuth → Bug 1565515 - DecodeBinary violates contract for 0-sized binary r=ttung,janv,asuth
Attachment #9077654 - Attachment description: Bug 1565515 - Updated comment r=asuth → Bug 1565515 - Updated comment r=ttung,janv,asuth
Attachment #9077655 - Attachment description: Bug 1565515 - fixed spelling mistake in comment r=asuth → Bug 1565515 - fixed spelling mistake in comment r=ttung,janv,asuth
Attachment #9077656 - Attachment description: Bug 1565515 - added TODO comments on duplicated code r=asuth → Bug 1565515 - added TODO comments on duplicated code r=ttung,janv,asuth
Attachment #9077658 - Attachment description: Bug 1565515 - added diagnostic output r=asuth → Bug 1565515 - added diagnostic output r=ttung,janv,asuth
Attachment #9077660 - Attachment description: Bug 1565515 - added note declaring that key list must be kept sorted r=asuth → Bug 1565515 - added note declaring that key list must be kept sorted r=ttung,janv,asuth
Attachment #9077661 - Attachment description: Bug 1565515 - added test keys with scalar ArrayBuffer and arrays containing ArrayBuffer r=asuth → Bug 1565515 - added test keys with scalar ArrayBuffer and arrays containing ArrayBuffer r=ttung,janv,asuth

EncodeString and EncodeBinary already use a common backend EncodeAsString,
the same should be done in decoding, as the encoding of a binary is
a special case of the encoding of a string.

Depends on D38075

Attachment #9077655 - Attachment description: Bug 1565515 - fixed spelling mistake in comment r=ttung,janv,asuth → Bug 1565515 - Fixed spelling mistake in comment r=ttung,janv,asuth
Attachment #9077656 - Attachment description: Bug 1565515 - added TODO comments on duplicated code r=ttung,janv,asuth → Bug 1565515 - Added TODO comments on duplicated code r=ttung,janv,asuth
Attachment #9077657 - Attachment description: Bug 1565515 - added handling of ArrayBuffer/binary keys to compareKeys functions r=ttung,janv,asuth → Bug 1565515 - Added handling of ArrayBuffer/binary keys to compareKeys functions r=ttung,janv,asuth
Attachment #9077658 - Attachment description: Bug 1565515 - added diagnostic output r=ttung,janv,asuth → Bug 1565515 - Added diagnostic output r=ttung,janv,asuth
Attachment #9077660 - Attachment description: Bug 1565515 - added note declaring that key list must be kept sorted r=ttung,janv,asuth → Bug 1565515 - Added note declaring that key list must be kept sorted r=ttung,janv,asuth
Attachment #9077661 - Attachment description: Bug 1565515 - added test keys with scalar ArrayBuffer and arrays containing ArrayBuffer r=ttung,janv,asuth → Bug 1565515 - Added test keys with scalar ArrayBuffer and arrays containing ArrayBuffer r=ttung,janv,asuth
Keywords: checkin-needed

Pushed by archaeopteryx@coole-files.de:
https://hg.mozilla.org/integration/autoland/rev/bd2e92310857
DecodeBinary violates contract for 0-sized binary r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/800e7de53622
Updated comment r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/594f76e67769
Fixed spelling mistake in comment r=ttung,asuth
https://hg.mozilla.org/integration/autoland/rev/ba109131fcad
Added TODO comments on duplicated code r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/aac0a4a4fc67
Added handling of ArrayBuffer/binary keys to compareKeys functions r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/5e2dcfefb4f5
Added diagnostic output r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/4815a910245c
Added note declaring that key list must be kept sorted r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/6d8e8f078383
Added test keys with scalar ArrayBuffer and arrays containing ArrayBuffer r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/052b34ddf704
Move sortKey variable declaration close to usage r=ttung,asuth
https://hg.mozilla.org/integration/autoland/rev/4f4f25ecac5c
Reduced code duplication in DecodeString/DecodeBinary r=ttung,asuth
https://hg.mozilla.org/integration/autoland/rev/6afea4389eb2
Define and use type aliases EncodedDataType r=ttung,asuth
https://hg.mozilla.org/integration/autoland/rev/8bdfc4852ae5
Removed duplication between LengthOfEncodedBinary and CalcDecodedStringySize r=ttung,asuth

Keywords: checkin-needed

Backed out 13 changesets (bug 1544750, bug 1565515) for bustages at /indexedDB/Key.cpp on a CLOSED TREE.

Backout link: https://hg.mozilla.org/integration/autoland/rev/3e0d79dd1de284de827b372abd0e89ac0c87eb09

**Push with failures:**https://treeherder.mozilla.org/#/jobs?repo=autoland&resultStatus=testfailed%2Cbusted%2Cexception&revision=8bdfc4852ae5c9f0052908c02c4b90a9bb6481fc&selectedJob=258546090

Log link: https://treeherder.mozilla.org/logviewer.html#/jobs?job_id=258546090&repo=autoland&lineNumber=26234

Log snippet:
[task 2019-07-26T19:21:08.121Z] 19:21:08 INFO - mkdir -p '.deps/'
[task 2019-07-26T19:21:08.121Z] 19:21:08 INFO - make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/dom/webauthn'
[task 2019-07-26T19:21:08.121Z] 19:21:08 INFO - make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/dom/webauthn'
[task 2019-07-26T19:21:08.121Z] 19:21:08 INFO - dom/webauthn/Unified_cpp_dom_webauthn0.o
[task 2019-07-26T19:21:08.121Z] 19:21:08 INFO - make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/dom/webauthn'
[task 2019-07-26T19:21:08.370Z] 19:21:08 INFO - make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/dom/indexedDB'
[task 2019-07-26T19:21:08.370Z] 19:21:08 INFO - /builds/worker/workspace/build/src/sccache/sccache /builds/worker/workspace/build/src/clang/bin/clang++ -m32 -o Key.o -c -I/builds/worker/workspace/build/src/obj-firefox/dist/stl_wrappers -I/builds/worker/workspace/build/src/obj-firefox/dist/system_wrappers -include /builds/worker/workspace/build/src/config/gcc_hidden.h -DDEBUG=1 -DOS_POSIX=1 -DOS_LINUX=1 -DSTATIC_EXPORTABLE_JS_API -DMOZ_HAS_MOZGLUE -DMOZILLA_INTERNAL_API -DIMPL_LIBXUL -I/builds/worker/workspace/build/src/dom/indexedDB -I/builds/worker/workspace/build/src/obj-firefox/dom/indexedDB -I/builds/worker/workspace/build/src/obj-firefox/ipc/ipdl/_ipdlheaders -I/builds/worker/workspace/build/src/ipc/chromium/src -I/builds/worker/workspace/build/src/ipc/glue -I/builds/worker/workspace/build/src/dom/base -I/builds/worker/workspace/build/src/dom/storage -I/builds/worker/workspace/build/src/ipc/glue -I/builds/worker/workspace/build/src/third_party/sqlite3/src -I/builds/worker/workspace/build/src/xpcom/build -I/builds/worker/workspace/build/src/obj-firefox/dist/include -I/builds/worker/workspace/build/src/obj-firefox/dist/include/nspr -I/builds/worker/workspace/build/src/obj-firefox/dist/include/nss -fPIC -DMOZILLA_CLIENT -include /builds/worker/workspace/build/src/obj-firefox/mozilla-config.h -Qunused-arguments -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -Qunused-arguments -Wall -Wbitfield-enum-conversion -Wempty-body -Wignored-qualifiers -Woverloaded-virtual -Wpointer-arith -Wshadow-field-in-constructor-modified -Wsign-compare -Wtype-limits -Wunreachable-code -Wunreachable-code-return -Wwrite-strings -Wno-invalid-offsetof -Wclass-varargs -Wfloat-overflow-conversion -Wfloat-zero-conversion -Wloop-analysis -Wc++1z-compat -Wc++2a-compat -Wcomma -Wimplicit-fallthrough -Werror=non-literal-null-conversion -Wstring-conversion -Wtautological-overlap-compare -Wtautological-unsigned-enum-zero-compare -Wtautological-unsigned-zero-compare -Wno-inline-new-delete -Wno-error=deprecated-declarations -Wno-error=array-bounds -Wno-error=backend-plugin -Wno-error=return-std-move -Wno-error=atomic-alignment -Wformat -Wformat-security -Wno-gnu-zero-variadic-macro-arguments -Wno-unknown-warning-option -Wno-return-type-c-linkage -D_GLIBCXX_USE_CXX11_ABI=0 -fno-sized-deallocation -fcrash-diagnostics-dir=/builds/worker/artifacts -march=pentium-m -msse -msse2 -mfpmath=sse -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-exceptions -fno-strict-aliasing -fno-rtti -ffunction-sections -fdata-sections -fno-exceptions -fno-math-errno -pthread -pipe -g -Xclang -load -Xclang /builds/worker/workspace/build/src/obj-firefox/build/clang-plugin/libclang-plugin.so -Xclang -add-plugin -Xclang moz-check -Os -fno-omit-frame-pointer -funwind-tables -Werror -Wno-error=shadow -MD -MP -MF .deps/Key.o.pp -Wno-error=type-limits /builds/worker/workspace/build/src/dom/indexedDB/Key.cpp
[task 2019-07-26T19:21:08.370Z] 19:21:08 ERROR - /builds/worker/workspace/build/src/dom/indexedDB/Key.cpp:664:34: error: comparison of integers of different signs: 'int' and 'const uint32_t' (aka 'const unsigned int') [-Werror,-Wsign-compare]
[task 2019-07-26T19:21:08.372Z] 19:21:08 INFO - NS_ASSERTION(decodedPos - aOut == aDecodedLength,
[task 2019-07-26T19:21:08.372Z] 19:21:08 INFO - ~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~
[task 2019-07-26T19:21:08.372Z] 19:21:08 INFO - /builds/worker/workspace/build/src/obj-firefox/dist/include/nsDebug.h:100:13: note: expanded from macro 'NS_ASSERTION'
[task 2019-07-26T19:21:08.372Z] 19:21:08 INFO - if (!(expr)) {
[task 2019-07-26T19:21:08.372Z] 19:21:08 INFO - ^~~~
[task 2019-07-26T19:21:08.372Z] 19:21:08 INFO - /builds/worker/workspace/build/src/dom/indexedDB/Key.cpp:695:3: note: in instantiation of function template specialization 'mozilla::dom::indexedDB::Key::DecodeAsStringy<char16_t>' requested here
[task 2019-07-26T19:21:08.373Z] 19:21:08 INFO - DecodeAsStringy(encodedSectionBegin, encodedSectionEnd, decodedLength, out);
[task 2019-07-26T19:21:08.373Z] 19:21:08 INFO - ^
[task 2019-07-26T19:21:08.373Z] 19:21:08 INFO - /builds/worker/workspace/build/src/dom/indexedDB/Key.cpp:703:3: note: in instantiation of function template specialization 'mozilla::dom::indexedDB::Key::DecodeStringy<'0', char16_t, (lambda at /builds/worker/workspace/build/src/dom/indexedDB/Key.cpp:705:7), (lambda at /builds/worker/workspace/build/src/dom/indexedDB/Key.cpp:708:7)>' requested here
[task 2019-07-26T19:21:08.373Z] 19:21:08 INFO - DecodeStringy<eString, char16_t>(
[task 2019-07-26T19:21:08.373Z] 19:21:08 INFO - ^
[task 2019-07-26T19:21:08.376Z] 19:21:08 ERROR - /builds/worker/workspace/build/src/dom/indexedDB/Key.cpp:664:34: error: comparison of integers of different signs: 'int' and 'const uint32_t' (aka 'const unsigned int') [-Werror,-Wsign-compare]
[task 2019-07-26T19:21:08.376Z] 19:21:08 INFO - NS_ASSERTION(decodedPos - aOut == aDecodedLength,
[task 2019-07-26T19:21:08.376Z] 19:21:08 INFO - ~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~
[task 2019-07-26T19:21:08.376Z] 19:21:08 INFO - /builds/worker/workspace/build/src/obj-firefox/dist/include/nsDebug.h:100:13: note: expanded from macro 'NS_ASSERTION'
[task 2019-07-26T19:21:08.376Z] 19:21:08 INFO - if (!(expr)) {
[task 2019-07-26T19:21:08.376Z] 19:21:08 INFO - ^~~~

Flags: needinfo?(sgiesecke)

Sorry for that, I am still new to the workflow. I have resolved the issues and pushed-to-try, I am just waiting for the remaining jobs to complete: https://treeherder.mozilla.org/#/jobs?repo=try&revision=5575ad5211908d5e9b232836e3d48b75c3baaa03

Flags: needinfo?(sgiesecke)

Looks good now on try, hope everything is fine

Keywords: checkin-needed

Simon, as I can see in lando D39005 and D38360 need review. Should we land the other patches?

Flags: needinfo?(sgiesecke)

(In reply to Razvan Maries from comment #17)

Simon, as I can see in lando D39005 and D38360 need review. Should we land the other patches?

Yes, those two revisions belong to Bug 1565224, which is still in review. This bug can be landed independently from that.

Flags: needinfo?(sgiesecke)

Pushed by rmaries@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/e0aa82bed5fa
DecodeBinary violates contract for 0-sized binary r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/8f3493b2cae1
Updated comment r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/2359da4989a7
Fixed spelling mistake in comment r=ttung,asuth
https://hg.mozilla.org/integration/autoland/rev/75cb7938f704
Added TODO comments on duplicated code r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/57ed49a17c9d
Added handling of ArrayBuffer/binary keys to compareKeys functions r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/2c0fb0c0e228
Added diagnostic output r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/91f546c40f98
Added note declaring that key list must be kept sorted r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/93be9fcab443
Added test keys with scalar ArrayBuffer and arrays containing ArrayBuffer r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/90fb12799ecd
Move sortKey variable declaration close to usage r=ttung,asuth
https://hg.mozilla.org/integration/autoland/rev/d70293010941
Reduced code duplication in DecodeString/DecodeBinary r=ttung,asuth
https://hg.mozilla.org/integration/autoland/rev/8619e09b03bb
Define and use type aliases EncodedDataType r=ttung,asuth
https://hg.mozilla.org/integration/autoland/rev/4d8c2c1bce2d
Removed duplication between LengthOfEncodedBinary and CalcDecodedStringySize r=ttung,asuth

Keywords: checkin-needed

Sorry, I now made the opposite misassumption about the synchronisation of try server and Phabricator: While I fixed the issues locally and push-to-try was successful, I missed submitting the changes to Phabricator, which I did just now. I sincerely hope there is no additional caveat I am unaware of.

Flags: needinfo?(sgiesecke)
Keywords: checkin-needed

Pushed by apavel@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/c56b0517d758
DecodeBinary violates contract for 0-sized binary r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/681fc4db981a
Updated comment r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/4dff1d583029
Fixed spelling mistake in comment r=ttung,asuth
https://hg.mozilla.org/integration/autoland/rev/ec828d3716ba
Added TODO comments on duplicated code r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/0b1108acd813
Added handling of ArrayBuffer/binary keys to compareKeys functions r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/e0b4db904b60
Added diagnostic output r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/08ae374a7d89
Added note declaring that key list must be kept sorted r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/7fc8d30534b2
Added test keys with scalar ArrayBuffer and arrays containing ArrayBuffer r=asuth,ttung
https://hg.mozilla.org/integration/autoland/rev/1b1ca518ca7a
Move sortKey variable declaration close to usage r=ttung,asuth
https://hg.mozilla.org/integration/autoland/rev/2aef1859366b
Reduced code duplication in DecodeString/DecodeBinary r=ttung,asuth
https://hg.mozilla.org/integration/autoland/rev/85fbe0106292
Define and use type aliases EncodedDataType r=ttung,asuth
https://hg.mozilla.org/integration/autoland/rev/3c4a84ec8b3a
Removed duplication between LengthOfEncodedBinary and CalcDecodedStringySize r=ttung,asuth

Keywords: checkin-needed
You need to log in before you can comment on or make changes to this bug.