| Index: content/browser/in_process_webkit/indexed_db_dispatcher_host.cc
|
| ===================================================================
|
| --- content/browser/in_process_webkit/indexed_db_dispatcher_host.cc (revision 183660)
|
| +++ content/browser/in_process_webkit/indexed_db_dispatcher_host.cc (working copy)
|
| @@ -26,6 +26,8 @@
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBCursor.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBDatabase.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBDatabaseCallbacks.h"
|
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBDatabaseError.h"
|
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBDatabaseException.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBFactory.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBIndex.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBMetadata.h"
|
| @@ -42,6 +44,7 @@
|
| using WebKit::WebIDBCallbacks;
|
| using WebKit::WebIDBCursor;
|
| using WebKit::WebIDBDatabase;
|
| +using WebKit::WebIDBDatabaseError;
|
| using WebKit::WebIDBIndex;
|
| using WebKit::WebIDBKey;
|
| using WebKit::WebIDBMetadata;
|
| @@ -714,6 +717,14 @@
|
| scoped_ptr<WebIDBCallbacks> callbacks(
|
| new IndexedDBCallbacks<WebIDBKey>(parent_, params.ipc_thread_id,
|
| params.ipc_response_id));
|
| +
|
| + if (params.index_ids.size() != params.index_keys.size()) {
|
| + callbacks->onError(WebIDBDatabaseError(
|
| + WebKit::WebIDBDatabaseExceptionUnknownError,
|
| + "Malformed IPC message: index_ids.size() != index_keys.size()"));
|
| + return;
|
| + }
|
| +
|
| idb_object_store->put(params.serialized_value, params.key,
|
| params.put_mode, callbacks.release(),
|
| *idb_transaction, params.index_ids,
|
| @@ -735,6 +746,12 @@
|
| &map_, ipc_object_store_id);
|
| WebIDBTransaction* idb_transaction = parent_->GetOrTerminateProcess(
|
| &parent_->transaction_dispatcher_host_->map_, ipc_transaction_id);
|
| +
|
| + if (index_names.size() != index_keys.size()) {
|
| + idb_transaction->abort();
|
| + return;
|
| + }
|
| +
|
| if (!idb_transaction || !idb_object_store)
|
| return;
|
| idb_object_store->setIndexKeys(primary_key,
|
|
|