2034061433
Change-Id: I313a57ed7c7ea2ada75065f55a7367376f6bdae5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/152183 Commit-Queue: Bob Nystrom <rnystrom@google.com> Auto-Submit: Bob Nystrom <rnystrom@google.com> Reviewed-by: Srujan Gaddam <srujzs@google.com>
72 lines
1.8 KiB
Dart
Executable File
72 lines
1.8 KiB
Dart
Executable File
// Copyright (c) 2019, 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.
|
|
|
|
// VMOptions=--deterministic
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
import 'dart:typed_data';
|
|
|
|
// Found by "value-guided" DartFuzzing: incorrect clamping.
|
|
// https://github.com/dart-lang/sdk/issues/37868
|
|
@pragma("vm:never-inline")
|
|
foo(List<int> x) => Uint8ClampedList.fromList(x);
|
|
|
|
@pragma("vm:never-inline")
|
|
bar(List<int> x) => Uint8List.fromList(x);
|
|
|
|
@pragma("vm:never-inline")
|
|
baz(List<int> x) => Int8List.fromList(x);
|
|
|
|
main() {
|
|
// Proper values.
|
|
final List<int> x = [
|
|
9223372036854775807,
|
|
-9223372036854775808,
|
|
9223372032559808513,
|
|
-9223372032559808513,
|
|
5000000000,
|
|
-5000000000,
|
|
2147483647,
|
|
-2147483648,
|
|
255,
|
|
-255,
|
|
11,
|
|
-11,
|
|
0,
|
|
-1,
|
|
];
|
|
Expect.listEquals(
|
|
[255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 11, 0, 0, 0], foo(x));
|
|
Expect.listEquals(
|
|
[255, 0, 1, 255, 0, 0, 255, 0, 255, 1, 11, 245, 0, 255], bar(x));
|
|
Expect.listEquals([-1, 0, 1, -1, 0, 0, -1, 0, -1, 1, 11, -11, 0, -1], baz(x));
|
|
|
|
// Hidden null.
|
|
final List<int> a = [1, null, 2].cast<int>();
|
|
int num_exceptions = 0;
|
|
try {
|
|
foo(a);
|
|
} catch (e) {
|
|
// In strong mode, .cast() throws a TypeError when casting to int. In weak
|
|
// mode, that cast succeeds and then NoSuchMethod is thrown later when the
|
|
// null is used.
|
|
Expect.isTrue(e is TypeError || e is NoSuchMethodError);
|
|
num_exceptions++;
|
|
}
|
|
try {
|
|
bar(a);
|
|
} catch (e) {
|
|
Expect.isTrue(e is TypeError || e is NoSuchMethodError);
|
|
num_exceptions++;
|
|
}
|
|
try {
|
|
baz(a);
|
|
} catch (e) {
|
|
Expect.isTrue(e is TypeError || e is NoSuchMethodError);
|
|
num_exceptions++;
|
|
}
|
|
Expect.equals(3, num_exceptions);
|
|
}
|