1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
| /*
| * Copyright 2018 Google Inc.
| *
| * Use of this source code is governed by a BSD-style license that can be
| * found in the LICENSE file.
| */
|
| #include "SkBitmap.h"
| #include "SkDashPathEffect.h"
| #include "SkPaint.h"
| #include "SkPath.h"
| #include "gm.h"
|
| // Repro case for skia:7674. Requires lots of RAM to run, and currently triggers UB:
| // ../include/private/SkTDArray.h:382:26:
| // runtime error: signed integer overflow: 2147483644 + 4 cannot be represented in type 'int'
|
| #if 0
| DEF_SIMPLE_GM(PathMeasure_explosion, canvas, 500,500) {
| SkPaint p;
| p.setAntiAlias(false);
| float intervals[] = { 0, 10e9f };
| p.setStyle(SkPaint::kStroke_Style);
| p.setPathEffect(SkDashPathEffect::Make(intervals, SK_ARRAY_COUNT(intervals), 0));
|
| int quadratic_at[] = {
| 13, 68, 258, 1053, 1323, 2608, 10018, 15668, 59838, 557493, 696873, 871098, 4153813,
| 15845608, 48357008, 118059138, 288230353, 360287948, 562949933, 703687423, 1099511613, 0
| };
| int next_quadratic_at = 0;
|
| SkPath path;
| path.moveTo(0, 0);
|
| int i = 1;
| for (int points = 1; points < 2147483647; ) {
| if (points == quadratic_at[next_quadratic_at]) {
| path.quadTo(i, 0, i, 0);
| next_quadratic_at++;
| points += 2;
| } else {
| path.lineTo(i, 0);
| points += 1;
| }
|
| i++;
|
| if (i == 1000000) {
| path.moveTo(0, 0);
| points += 1;
| i = 1;
| }
| }
| canvas->drawPath(path, p);
| }
| #endif
|
|