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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
var truncate = require('./truncate');
exports['should truncate text with given length'] = function (t) {
var input, expect, actual;
input = null;
actual = truncate(input, 3);
expect = '';
t.strictEqual(expect, actual);
input = '';
actual = truncate(input, 3);
expect = '';
t.strictEqual(expect, actual);
input = 'hello';
actual = truncate(input, 3);
expect = 'hel…';
t.strictEqual(expect, actual);
input = 'I am not sure what I am talking about';
actual = truncate(input, 10);
expect = 'I am not s…';
t.strictEqual(expect, actual);
t.done();
};
exports['should keep url safe'] = function (t) {
var input, expect, actual;
input = 'Hey http://distilleryimage8.s3.amazonaws.com/719bf2329ddd11e28c3122000aa80097_7.jpg';
actual = truncate(input, 4);
expect = 'Hey …';
t.strictEqual(expect, actual);
input = 'Hey http://distilleryimage8.s3.amazonaws.com/719bf2329ddd11e28c3122000aa80097_7.jpg';
actual = truncate(input, 5);
expect = 'Hey http://distilleryimage8.s3.amazonaws.com/719bf2329ddd11e28c3122000aa80097_7.jpg';
t.strictEqual(expect, actual);
input = 'http://successfulsoftware.net/2013/03/19/the-brutal-truth-about-marketing-your-software-product/ http://successfulsoftware.net/2013/03/19/the-brutal-truth-about-marketing-your-software-product2/';
actual = truncate(input, 96);
expect = 'http://successfulsoftware.net/2013/03/19/the-brutal-truth-about-marketing-your-software-product/…';
t.strictEqual(expect, actual);
input = 'http://successfulsoftware.net/2013/03/19/the-brutal-truth-about-marketing-your-software-product/ http://successfulsoftware.net/2013/03/19/the-brutal-truth-about-marketing-your-software-product2/';
actual = truncate(input, 100);
expect = 'http://successfulsoftware.net/2013/03/19/the-brutal-truth-about-marketing-your-software-product/ http://successfulsoftware.net/2013/03/19/the-brutal-truth-about-marketing-your-software-product2/';
t.strictEqual(expect, actual);
input = 'Hey http://distilleryimage8.s3.amazonaws.com/719bf2329ddd11e28c3122000aa80097_7.jpg';
actual = truncate(input, 5);
expect = 'Hey http://distilleryimage8.s3.amazonaws.com/719bf2329ddd11e28c3122000aa80097_7.jpg';
t.strictEqual(expect, actual);
input = 'Hey http://hehe.com plop http://plop.com';
actual = truncate(input, 6);
expect = 'Hey http://hehe.com…';
t.strictEqual(expect, actual);
input = 'Hey http://hehe.com plop http://plop.com';
actual = truncate(input, 22);
expect = 'Hey http://hehe.com pl…';
t.strictEqual(expect, actual);
input = 'Hey http://hehe.com plop http://plop.com';
actual = truncate(input, 25);
expect = 'Hey http://hehe.com plop …';
t.strictEqual(expect, actual);
input = 'Hey http://hehe.com plop http://plop.com';
actual = truncate(input, 26);
t.strictEqual(input, actual);
t.done();
};
exports['Not vulnerable to REDOS'] = function (t) {
var prefix, pump, suffix, nPumps, attackString; // for evil input
var input, actual, expect; // input to truncate()
var before, elapsed; // timing
/* URL_REGEX */
prefix = '-@w--w--';
pump = 'ww--';
suffix = '';
nPumps = 20000;
attackString = prefix;
for (var i = 0; i < nPumps; i++) {
attackString += pump;
}
attackString += suffix;
before = process.hrtime();
input = 'Hey ' + attackString;
actual = truncate(input, 4);
expect = 'Hey …';
t.strictEqual(expect, actual);
elapsed = process.hrtime(before);
t.equals(elapsed[0], 0); // Should take < 1 second
t.done();
};
|