Commit bc49bd88 authored by Dave Tapuska's avatar Dave Tapuska Committed by Commit Bot

Fix 64 bit truncations in indexdb

Cursor advance IDL didn't match the C++ code for types. Make them match.

BUG=879657

Change-Id: I5248e1e40aa35ef471e62d818eafe9c335d82b3f
Reviewed-on: https://chromium-review.googlesource.com/c/1348866Reviewed-by: default avatarChris Mumford <cmumford@chromium.org>
Reviewed-by: default avatarKen Buchanan <kenrb@chromium.org>
Commit-Queue: Dave Tapuska <dtapuska@chromium.org>
Cr-Commit-Position: refs/heads/master@{#610891}
parent 8ab9f1ef
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "third_party/blink/public/common/indexeddb/indexeddb_metadata.h" #include "third_party/blink/public/common/indexeddb/indexeddb_metadata.h"
#include "third_party/blink/renderer/modules/indexeddb/idb_key_range.h" #include "third_party/blink/renderer/modules/indexeddb/idb_key_range.h"
#include "third_party/blink/renderer/platform/mojo/string16_mojom_traits.h" #include "third_party/blink/renderer/platform/mojo/string16_mojom_traits.h"
#include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
using blink::mojom::IDBCursorDirection; using blink::mojom::IDBCursorDirection;
...@@ -149,7 +150,7 @@ UnionTraits<blink::mojom::IDBKeyDataDataView, blink::WebIDBKey>::key_array( ...@@ -149,7 +150,7 @@ UnionTraits<blink::mojom::IDBKeyDataDataView, blink::WebIDBKey>::key_array(
const auto& array_view = key.View().ArrayView(); const auto& array_view = key.View().ArrayView();
const size_t array_size = array_view.size(); const size_t array_size = array_view.size();
Vector<blink::WebIDBKey> result; Vector<blink::WebIDBKey> result;
result.ReserveInitialCapacity(array_view.size()); result.ReserveInitialCapacity(SafeCast<wtf_size_t>(array_view.size()));
// |array_view| is of type WebIDBKeyArrayView which only implements size() // |array_view| is of type WebIDBKeyArrayView which only implements size()
// and operator[]. Since it doesn't have other typical array functions, we // and operator[]. Since it doesn't have other typical array functions, we
// must use an iterator-style for loop. // must use an iterator-style for loop.
...@@ -164,7 +165,7 @@ UnionTraits<blink::mojom::IDBKeyDataDataView, blink::WebIDBKey>::binary( ...@@ -164,7 +165,7 @@ UnionTraits<blink::mojom::IDBKeyDataDataView, blink::WebIDBKey>::binary(
const blink::WebIDBKey& key) { const blink::WebIDBKey& key) {
const auto& data = key.View().Binary(); const auto& data = key.View().Binary();
Vector<uint8_t> result; Vector<uint8_t> result;
result.ReserveInitialCapacity(data.size()); result.ReserveInitialCapacity(SafeCast<wtf_size_t>(data.size()));
data.ForEachSegment([&result](const char* segment, size_t segment_size, data.ForEachSegment([&result](const char* segment, size_t segment_size,
size_t segment_offset) { size_t segment_offset) {
const auto& segment_span = base::make_span(segment, segment + segment_size); const auto& segment_span = base::make_span(segment, segment + segment_size);
...@@ -207,7 +208,7 @@ StructTraits<blink::mojom::IDBKeyPathDataView, blink::WebIDBKeyPath>::data( ...@@ -207,7 +208,7 @@ StructTraits<blink::mojom::IDBKeyPathDataView, blink::WebIDBKeyPath>::data(
case blink::kWebIDBKeyPathTypeArray: { case blink::kWebIDBKeyPathTypeArray: {
const auto& array = key_path.Array(); const auto& array = key_path.Array();
Vector<String> result; Vector<String> result;
result.ReserveInitialCapacity(array.size()); result.ReserveInitialCapacity(SafeCast<wtf_size_t>(array.size()));
for (const auto& item : array) for (const auto& item : array)
result.push_back(item); result.push_back(item);
data->set_string_array(result); data->set_string_array(result);
......
...@@ -39,7 +39,7 @@ class MODULES_EXPORT WebIDBCursor { ...@@ -39,7 +39,7 @@ class MODULES_EXPORT WebIDBCursor {
virtual ~WebIDBCursor() = default; virtual ~WebIDBCursor() = default;
// Used to implement IDBCursor.advance(). // Used to implement IDBCursor.advance().
virtual void Advance(unsigned long count, WebIDBCallbacks*) = 0; virtual void Advance(uint32_t count, WebIDBCallbacks*) = 0;
// Used to implement IDBCursor.continue() and IDBCursor.continuePrimaryKey(). // Used to implement IDBCursor.continue() and IDBCursor.continuePrimaryKey().
// //
......
...@@ -48,8 +48,7 @@ WebIDBCursorImpl::~WebIDBCursorImpl() { ...@@ -48,8 +48,7 @@ WebIDBCursorImpl::~WebIDBCursorImpl() {
IndexedDBDispatcher::UnregisterCursor(this); IndexedDBDispatcher::UnregisterCursor(this);
} }
void WebIDBCursorImpl::Advance(unsigned long count, void WebIDBCursorImpl::Advance(uint32_t count, WebIDBCallbacks* callbacks_ptr) {
WebIDBCallbacks* callbacks_ptr) {
std::unique_ptr<WebIDBCallbacks> callbacks(callbacks_ptr); std::unique_ptr<WebIDBCallbacks> callbacks(callbacks_ptr);
if (count <= prefetch_keys_.size()) { if (count <= prefetch_keys_.size()) {
CachedAdvance(count, callbacks.get()); CachedAdvance(count, callbacks.get());
......
...@@ -28,7 +28,7 @@ class MODULES_EXPORT WebIDBCursorImpl : public WebIDBCursor { ...@@ -28,7 +28,7 @@ class MODULES_EXPORT WebIDBCursorImpl : public WebIDBCursor {
int64_t transaction_id); int64_t transaction_id);
~WebIDBCursorImpl() override; ~WebIDBCursorImpl() override;
void Advance(unsigned long count, WebIDBCallbacks* callback) override; void Advance(uint32_t count, WebIDBCallbacks* callback) override;
void CursorContinue(WebIDBKeyView key, void CursorContinue(WebIDBKeyView key,
WebIDBKeyView primary_key, WebIDBKeyView primary_key,
WebIDBCallbacks* callback) override; WebIDBCallbacks* callback) override;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment