Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(995)

Unified Diff: third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp

Issue 2781273004: Graceful handling of new versions of IndexedDB serialized data. (Closed)
Patch Set: Addressed feedback. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp
diff --git a/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp b/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp
index f2a8be4e39a38c7f30aafb55075aec6c9dd5f064..a8ef6189e2196ee21dc12aa38420120d348559fc 100644
--- a/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp
+++ b/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp
@@ -57,10 +57,6 @@ namespace blink {
static v8::Local<v8::Value> deserializeIDBValueData(v8::Isolate*,
const IDBValue*);
-static v8::Local<v8::Value> deserializeIDBValue(
- v8::Isolate*,
- v8::Local<v8::Object> creationContext,
- const IDBValue*);
static v8::Local<v8::Value> deserializeIDBValueArray(
v8::Isolate*,
v8::Local<v8::Object> creationContext,
@@ -394,16 +390,21 @@ static v8::Local<v8::Value> deserializeIDBValueData(v8::Isolate* isolate,
}
// Deserialize the entire IDBValue (injecting key & keypath if present).
-static v8::Local<v8::Value> deserializeIDBValue(
- v8::Isolate* isolate,
- v8::Local<v8::Object> creationContext,
- const IDBValue* value) {
+v8::Local<v8::Value> deserializeIDBValue(v8::Isolate* isolate,
+ v8::Local<v8::Object> creationContext,
+ const IDBValue* value) {
ASSERT(isolate->InContext());
if (!value || value->isNull())
return v8::Null(isolate);
v8::Local<v8::Value> v8Value = deserializeIDBValueData(isolate, value);
- if (value->primaryKey()) {
+
+ // De-serialization failures are currently handled by returning null. This is
+ // sub-optimal, as it can cause IndexedDB to return incorrect data. The check
jsbell 2017/04/03 19:31:52 Maybe note that null is a perfectly valid IDB valu
pwnall 2017/04/04 00:55:12 Done.
+ // below is the minimal work needed to avoid a crash. A proper solution would
jsbell 2017/04/03 19:31:52 Since this comment tracks future work, rephrase as
pwnall 2017/04/04 00:55:12 I used the crbug targeted by this CL, because the
+ // require SerializedScriptValue to throw rather than returning null when it
jsbell 2017/04/03 19:31:52 Return an empty handle? I wouldn't expect SSV API
pwnall 2017/04/04 00:55:12 Done. I switched to your suggestion of suggesting
+ // encounters errors.
+ if (value->primaryKey() && !v8Value->IsNull()) {
jsbell 2017/04/03 19:31:52 I wonder if we want to have more comments/DCHECKs
pwnall 2017/04/04 00:55:12 I think that there is a check at a higher level --
v8::Local<v8::Value> key =
ToV8(value->primaryKey(), creationContext, isolate);
if (key.IsEmpty())

Powered by Google App Engine
This is Rietveld 408576698