Fix for issue 24243 (allow objects of dart:core and dart:collections to be passed in for now, we need a whitelist of core types against which we need to check)

BUG=24243
R=koda@google.com

Review URL: https://codereview.chromium.org//1343213002 .
This commit is contained in:
Siva Annamalai 2015-09-16 12:08:45 -07:00
parent 026dfad28c
commit 807eacae30
6 changed files with 169 additions and 1 deletions

View file

@ -2668,7 +2668,9 @@ void SnapshotWriter::WriteInstanceRef(RawObject* raw, RawClass* cls) {
bool SnapshotWriter::AllowObjectsInDartLibrary(RawLibrary* library) {
return library == object_store()->typed_data_library();
return (library == object_store()->collection_library() ||
library == object_store()->core_library() ||
library == object_store()->typed_data_library());
}

View file

@ -45,6 +45,7 @@ spawn_uri_exported_main_test: SkipByDesign # Test uses a ".dart" URI.
issue_21398_parent_isolate_test: SkipByDesign # Test uses a ".dart" URI.
issue_21398_parent_isolate1_test: SkipByDesign # Test uses a ".dart" URI.
issue_21398_parent_isolate2_test: SkipByDesign # Test uses a ".dart" URI.
issue_24243_parent_isolate_test: SkipByDesign # Test uses a ".dart" URI.
function_send1_test: SkipByDesign # Test uses a ".dart" URI.
error_exit_at_spawnuri_test: SkipByDesign # Test uses a ".dart" URI.
error_at_spawnuri_test: SkipByDesign # Test uses a ".dart" URI.

View file

@ -0,0 +1,18 @@
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:isolate';
main(List<String> args, message) {
var sendPort = message;
try {
var list0 = <int>[1, 2, 3];
var list1 = <int>[4, 5, 6];
var list2 = <int>[7, 8, 9];
var list = new List<List<int>>.from([list0, list1, list2]);
sendPort.send(list);
} catch(error) {
sendPort.send("Invalid Argument(s).");
}
}

View file

@ -0,0 +1,18 @@
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:isolate';
main(List<String> args, message) {
var sendPort = message;
try {
var map0 = <int, String>{1:'one', 2:'two', 3:'three'};
var map1 = <int, String>{4:'four', 5:'five', 6:'six'};
var map2 = <int, String>{7:'seven', 8:'eight', 9:'nine'};
var map = new Map<int, Map<int, String>>.from({0:map0, 1:map1, 2:map2});
sendPort.send(map);
} catch(error) {
sendPort.send("Invalid Argument(s).");
}
}

View file

@ -0,0 +1,30 @@
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:collection';
import 'dart:isolate';
main(List<String> args, message) {
var sendPort = message;
try {
var map0 = new LinkedHashMap<int, String>();
map0[1] = 'one';
map0[2] = 'two';
map0[3] = 'three';
var map1 = new LinkedHashMap<int, String>();
map1[4] = 'four';
map1[5] = 'five';
map1[6] = 'size';
var map2 = new LinkedHashMap<int, String>();
map2[7] = 'seven';
map2[8] = 'eight';
map2[9] = 'nine';
var map = new Map<int, LinkedHashMap<int, String>>.from(
{ 0:map0, 1:map1, 2:map2 });
sendPort.send(map);
} catch(error) {
sendPort.send("Invalid Argument(s).");
}
}

View file

@ -0,0 +1,99 @@
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// Note: the following comment is used by test.dart to additionally compile the
// other isolate's code.
// OtherScripts=issue_24243_child1_isolate.dart
// OtherScripts=issue_24243_child2_isolate.dart
// OtherScripts=issue_24243_child3_isolate.dart
// VMOptions=--checked
import 'dart:collection';
import 'dart:isolate';
import "package:expect/expect.dart";
main() {
// First spawn an isolate using spawnURI and have it
// send back a "literal" like list object.
var receive1 = new ReceivePort();
Isolate.spawnUri(Uri.parse('issue_24243_child1_isolate.dart'),
[],
receive1.sendPort).then(
(isolate) {
receive1.listen(
(msg) {
var list0 = <int>[1, 2, 3];
var list1 = <int>[4, 5, 6];
var list2 = <int>[7, 8, 9];
Expect.isTrue(msg is List<List<int>>);
Expect.listEquals(msg[0], list0);
Expect.listEquals(msg[1], list1);
Expect.listEquals(msg[2], list2);
Expect.throws(() => msg[0] = "throw an exception");
receive1.close();
},
onError: (e) => print('$e')
);
}
);
// Now spawn an isolate using spawnURI and have it
// send back a "literal" like map object.
var receive2 = new ReceivePort();
Isolate.spawnUri(Uri.parse('issue_24243_child2_isolate.dart'),
[],
receive2.sendPort).then(
(isolate) {
receive2.listen(
(msg) {
var map0 = <int, String>{1:'one', 2:'two', 3:'three'};
var map1 = <int, String>{4:'four', 5:'five', 6:'six'};
var map2 = <int, String>{7:'seven', 8:'eight', 9:'nine'};
Expect.isTrue(msg is Map<int, Map<int, String>>);
Expect.mapEquals(msg[0], map0);
Expect.mapEquals(msg[1], map1);
Expect.mapEquals(msg[2], map2);
Expect.throws(() => msg[0] = "throw an exception");
receive2.close();
},
onError: (e) => print('$e')
);
}
);
// Now spawn an isolate using spawnURI and have it
// send back a "literal" like LinkedHashMap object.
var receive3 = new ReceivePort();
Isolate.spawnUri(Uri.parse('issue_24243_child3_isolate.dart'),
[],
receive3.sendPort).then(
(isolate) {
receive3.listen(
(msg) {
var map0 = new LinkedHashMap<int, String>();
map0[1] = 'one';
map0[2] = 'two';
map0[3] = 'three';
var map1 = new LinkedHashMap<int, String>();
map1[4] = 'four';
map1[5] = 'five';
map1[6] = 'size';
var map2 = new LinkedHashMap<int, String>();
map2[7] = 'seven';
map2[8] = 'eight';
map2[9] = 'nine';
Expect.isTrue(msg is Map<int, LinkedHashMap<int, String>>);
Expect.mapEquals(msg[0], map0);
Expect.mapEquals(msg[1], map1);
Expect.mapEquals(msg[2], map2);
Expect.throws(() => msg[0] = "throw an exception");
receive3.close();
},
onError: (e) => print('$e')
);
}
);
}