| // Copyright (c) 2012, 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. |
| // Issue 24043. |
| |
| // @dart = 2.9 |
| |
| import "package:expect/expect.dart"; |
| |
| class EvilMatch implements Match { |
| int get start => 100000000; |
| int get end => 3; |
| bool noSuchMethod(Invocation im) => false; // To appease dartanalyzer. |
| } |
| |
| class EvilIterator implements Iterator<Match> { |
| bool moveNext() => true; |
| EvilMatch get current => new EvilMatch(); |
| } |
| |
| class EvilIterable extends Iterable<Match> { |
| get iterator => new EvilIterator(); |
| } |
| |
| class EvilPattern implements Pattern { |
| allMatches(String s, [int start = 0]) => new EvilIterable(); |
| bool noSuchMethod(Invocation im) => false; // To appease dartanalyzer. |
| } |
| |
| void main() { |
| Expect.throwsRangeError(() => "foo".split(new EvilPattern())[0].length); |
| } |