1
+ import { cveMap , getPatchedVersion , jQueryVersions } from './cve-data.mjs'
2
+
3
+ const dis = this ;
4
+
1
5
function log ( txt ) {
2
6
console . log ( txt ) ;
3
7
}
@@ -27,17 +31,6 @@ window.alert = function(...args) {
27
31
// windowAlert(...args);
28
32
} ;
29
33
30
- const cveMap = new Map ( [
31
- [ '2011-4969' , { versions : [ '1.2.6' , '1.3.2' , '1.4.4' , '1.5.2' ] } ] ,
32
- [ '2012-6708' , { versions : [ '1.2.6' , '1.3.2' , '1.4.4' , '1.5.2' , '1.6.4' , '1.7.2' , '1.8.3' ] } ] ,
33
- [ '2015-9251' , { versions : [ '1.2.6' , '1.3.2' , '1.4.4' , '1.5.2' , '1.6.4' , '1.7.2' , '1.8.3' , '1.12.4' , '2.2.4' ] } ] ,
34
- [ '2019-11358' , { versions : [ '1.2.6' , '1.3.2' , '1.4.4' , '1.5.2' , '1.6.4' , '1.7.2' , '1.8.3' , '1.12.4' , '2.2.4' ] } ] ,
35
- [ '2020-7656' , { versions : [ '1.2.6' , '1.3.2' , '1.4.4' , '1.5.2' , '1.6.4' , '1.7.2' , '1.8.3' ] } ] ,
36
- [ '2020-11022' , { versions : [ '1.2.6' , '1.3.2' , '1.4.4' , '1.5.2' , '1.6.4' , '1.7.2' , '1.8.3' , '1.12.4' , '2.2.4' ] } ] ,
37
- [ '2020-11023' , { versions : [ '1.2.6' , '1.3.2' , '1.4.4' , '1.5.2' , '1.6.4' , '1.7.2' , '1.8.3' , '1.12.4' , '2.2.4' ] } ] ,
38
- [ '2020-23064' , { versions : [ '2.2.4' ] } ] ,
39
- ] ) ;
40
-
41
34
const cveTemplate = `
42
35
<div class="cve">
43
36
<div class="cve__header">
@@ -61,20 +54,19 @@ for (const cve of cveMap) {
61
54
const cveID = `CVE-${ cve [ 0 ] } ` ;
62
55
const t = document . createElement ( 'template' ) ;
63
56
t . innerHTML = cveTemplate ;
57
+ t . content . querySelector ( '.cve' ) . id = cveID ;
64
58
t . content . querySelector ( '.cve__header' ) . textContent = cveID ;
65
59
const b = t . content . querySelector ( 'button' ) ;
66
60
b . textContent = cveID ;
67
61
b . addEventListener ( 'click' , function ( ) {
68
62
log ( `called ${ cveID } ` )
69
- window [ cveID . replaceAll ( '-' , '_' ) ] ( cve ) ;
63
+ window . doNotPolluteTheGlobalNamespace [ cveID . replaceAll ( '-' , '_' ) ] ( cve ) ;
70
64
setTimeout ( ( ) => updateCVE ( cve ) , 100 ) ;
71
65
} ) ;
72
66
cveButtons . push ( b ) ;
73
67
cveContainer . append ( t . content ) ;
74
68
}
75
69
76
- const jQueryVersions = new Set ( Array . from ( cveMap , ( [ name , value ] ) => ( value . versions ) ) . flat ( ) ) ;
77
-
78
70
for ( const v of jQueryVersions ) {
79
71
const o = document . createElement ( 'option' ) ;
80
72
o . textContent = v ;
@@ -84,12 +76,24 @@ for (const v of jQueryVersions) {
84
76
const VERSION = 'VERSION' ;
85
77
const PATCHED = 'PATCHED' ;
86
78
87
- const sessionVersion = sessionStorage . getItem ( VERSION ) ;
88
- const sessionPatched = sessionStorage . getItem ( PATCHED ) ;
79
+ const qs = ( new URL ( document . location ) ) . searchParams ;
80
+ const qsVersion = qs . get ( VERSION ) ;
81
+ const qsPatched = qs . get ( PATCHED ) ;
82
+
83
+ if ( qsVersion ) {
84
+ selVersion . value = qsVersion ;
85
+ chkPatched . checked = qsPatched === 'true' ;
86
+ }
87
+ else {
88
+
89
+ const sessionVersion = sessionStorage . getItem ( VERSION ) ;
90
+ const sessionPatched = sessionStorage . getItem ( PATCHED ) ;
91
+
92
+ if ( sessionVersion ) {
93
+ selVersion . value = sessionVersion ;
94
+ chkPatched . checked = sessionPatched === 'true' ;
95
+ }
89
96
90
- if ( sessionVersion ) {
91
- selVersion . value = sessionVersion ;
92
- chkPatched . checked = sessionPatched === 'true' ;
93
97
}
94
98
95
99
changeVersion ( ) ;
@@ -120,8 +124,7 @@ function changeVersion() {
120
124
document . querySelectorAll ( '.cve' ) . forEach ( e => e . classList . remove ( 'hide' ) ) ;
121
125
} ;
122
126
123
- const versionParts = version . split ( '.' ) ;
124
- const loadVersion = patched ? `${ versionParts [ 0 ] } .${ versionParts [ 1 ] } .${ Number ( versionParts [ 2 ] ) + 1 } -sec` : version ;
127
+ const loadVersion = patched ? getPatchedVersion ( version ) : version ;
125
128
126
129
s . onerror = function ( ) {
127
130
if ( typeof jQuery !== 'undefined' ) {
@@ -194,6 +197,7 @@ function CVE_2011_4969(cve){
194
197
handleJQuerySyntaxError ( e ) ;
195
198
}
196
199
200
+ history . replaceState ( null , null , ' ' ) ; // clear out location.hash completely
197
201
198
202
}
199
203
@@ -219,7 +223,7 @@ function CVE_2012_6708(cve) {
219
223
}
220
224
221
225
function CVE_2015_9251 ( cve ) {
222
- $ . get ( "http://localhost:4000 /jqueryxss" , function ( content ) {
226
+ $ . get ( "http://localhost:3334 /jqueryxss" , function ( content ) {
223
227
// since we are relying on an external resource for this test, guard against regression
224
228
const expected = `triggerCVE('${ cve [ 0 ] } ');` ;
225
229
const expectedContentFound = content === expected ;
@@ -228,7 +232,6 @@ function CVE_2015_9251(cve) {
228
232
error ( 'CVE-2015-9251 CANNOT BE VERIFIED!' ) ;
229
233
}
230
234
} ) ;
231
- // log('CVE-2015-9251 is not reproducible in 1.2.6, so ignore this test');
232
235
}
233
236
234
237
function CVE_2019_11358 ( cve ) {
@@ -266,3 +269,15 @@ function CVE_2020_23064(cve) {
266
269
// this is a duplicate of CVE-2020-11023
267
270
CVE_2020_11023 ( cve ) ;
268
271
}
272
+
273
+ window . triggerCVE = triggerCVE ;
274
+ window . doNotPolluteTheGlobalNamespace = {
275
+ CVE_2011_4969 ,
276
+ CVE_2012_6708 ,
277
+ CVE_2015_9251 ,
278
+ CVE_2019_11358 ,
279
+ CVE_2020_7656 ,
280
+ CVE_2020_11022 ,
281
+ CVE_2020_11023 ,
282
+ CVE_2020_23064 ,
283
+ } ;
0 commit comments