File tree Expand file tree Collapse file tree 3 files changed +62
-6
lines changed Expand file tree Collapse file tree 3 files changed +62
-6
lines changed Original file line number Diff line number Diff line change @@ -8,6 +8,7 @@ var https = require('https');
8
8
var parseUrl = require ( 'url' ) . parse ;
9
9
var fs = require ( 'fs' ) ;
10
10
var Stream = require ( 'stream' ) . Stream ;
11
+ var crypto = require ( 'crypto' ) ;
11
12
var mime = require ( 'mime-types' ) ;
12
13
var asynckit = require ( 'asynckit' ) ;
13
14
var setToStringTag = require ( 'es-set-tostringtag' ) ;
@@ -345,12 +346,7 @@ FormData.prototype._generateBoundary = function () {
345
346
// This generates a 50 character boundary similar to those used by Firefox.
346
347
347
348
// They are optimized for boyer-moore parsing.
348
- var boundary = '--------------------------' ;
349
- for ( var i = 0 ; i < 24 ; i ++ ) {
350
- boundary += Math . floor ( Math . random ( ) * 10 ) . toString ( 16 ) ;
351
- }
352
-
353
- this . _boundary = boundary ;
349
+ this . _boundary = '--------------------------' + crypto . randomBytes ( 12 ) . toString ( 'hex' ) ;
354
350
} ;
355
351
356
352
// Note: getLengthSync DOESN'T calculate streams length
Original file line number Diff line number Diff line change 58
58
"istanbul" : " ^0.4.5" ,
59
59
"obake" : " ^0.1.2" ,
60
60
"pkgfiles" : " ^2.3.2" ,
61
+ "pre-commit" : " ^1.2.2" ,
62
+ "predict-v8-randomness" : " ^1.0.35" ,
63
+ "puppeteer" : " ^1.20.0" ,
61
64
"request" : " ~2.87.0" ,
62
65
"rimraf" : " ^2.7.1" ,
63
66
"tape" : " ^5.9.0"
Original file line number Diff line number Diff line change
1
+ var common = require ( '../common' ) ;
2
+ var assert = common . assert ;
3
+ var FormData = require ( common . dir . lib + '/form_data' ) ;
4
+ var predictV8Randomness = require ( 'predict-v8-randomness' ) ;
5
+
6
+ var initialSequence = [
7
+ Math . random ( ) ,
8
+ Math . random ( ) ,
9
+ Math . random ( ) ,
10
+ Math . random ( ) ,
11
+ ] ;
12
+ var predictor = new predictV8Randomness . Predictor ( initialSequence ) ;
13
+
14
+ predictor . predictNext ( 24 ) . then ( function ( next24RandomOutputs ) {
15
+ var predictedBoundary = next24RandomOutputs
16
+ . map ( function ( v ) {
17
+ return Math . floor ( v * 10 ) . toString ( 16 ) ;
18
+ } )
19
+ . join ( '' ) ;
20
+
21
+ var boundaryIntro = '----------------------------' ;
22
+
23
+ var payload =
24
+ 'zzz\r\n' +
25
+ boundaryIntro +
26
+ predictedBoundary +
27
+ '\r\nContent-Disposition: form-data; name="is_admin"\r\n\r\ntrue\r\n' +
28
+ boundaryIntro +
29
+ predictedBoundary +
30
+ '--\r\n' ;
31
+
32
+ var FIELDS = {
33
+ my_field : {
34
+ value : payload ,
35
+ } ,
36
+ } ;
37
+
38
+ // count total
39
+ var fieldsPassed = Object . keys ( FIELDS ) . length ;
40
+
41
+ // prepare form-receiving http server
42
+ var server = common . testFields ( FIELDS , function ( fields ) {
43
+ fieldsPassed = fields ;
44
+ } ) ;
45
+
46
+ server . listen ( common . port , function ( ) {
47
+ var form = new FormData ( ) ;
48
+
49
+ common . actions . populateFields ( form , FIELDS ) ;
50
+
51
+ common . actions . submit ( form , server ) ;
52
+ } ) ;
53
+
54
+ process . on ( 'exit' , function ( ) {
55
+ assert . strictEqual ( fieldsPassed , 0 ) ;
56
+ } ) ;
57
+ } ) ;
You can’t perform that action at this time.
0 commit comments