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');
88var parseUrl = require ( 'url' ) . parse ;
99var fs = require ( 'fs' ) ;
1010var Stream = require ( 'stream' ) . Stream ;
11+ var crypto = require ( 'crypto' ) ;
1112var mime = require ( 'mime-types' ) ;
1213var asynckit = require ( 'asynckit' ) ;
1314var setToStringTag = require ( 'es-set-tostringtag' ) ;
@@ -345,12 +346,7 @@ FormData.prototype._generateBoundary = function () {
345346 // This generates a 50 character boundary similar to those used by Firefox.
346347
347348 // 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' ) ;
354350} ;
355351
356352// Note: getLengthSync DOESN'T calculate streams length
Original file line number Diff line number Diff line change 5858 "istanbul" : " ^0.4.5" ,
5959 "obake" : " ^0.1.2" ,
6060 "pkgfiles" : " ^2.3.2" ,
61+ "pre-commit" : " ^1.2.2" ,
62+ "predict-v8-randomness" : " ^1.0.35" ,
63+ "puppeteer" : " ^1.20.0" ,
6164 "request" : " ~2.87.0" ,
6265 "rimraf" : " ^2.7.1" ,
6366 "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