1+ import { cveMap , getPatchedVersion , jQueryVersions } from './cve-data.mjs'
2+
3+ const dis = this ;
4+
15function log ( txt ) {
26 console . log ( txt ) ;
37}
@@ -27,17 +31,6 @@ window.alert = function(...args) {
2731 // windowAlert(...args);
2832} ;
2933
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-
4134const cveTemplate = `
4235<div class="cve">
4336 <div class="cve__header">
@@ -61,20 +54,19 @@ for (const cve of cveMap) {
6154 const cveID = `CVE-${ cve [ 0 ] } ` ;
6255 const t = document . createElement ( 'template' ) ;
6356 t . innerHTML = cveTemplate ;
57+ t . content . querySelector ( '.cve' ) . id = cveID ;
6458 t . content . querySelector ( '.cve__header' ) . textContent = cveID ;
6559 const b = t . content . querySelector ( 'button' ) ;
6660 b . textContent = cveID ;
6761 b . addEventListener ( 'click' , function ( ) {
6862 log ( `called ${ cveID } ` )
69- window [ cveID . replaceAll ( '-' , '_' ) ] ( cve ) ;
63+ window . doNotPolluteTheGlobalNamespace [ cveID . replaceAll ( '-' , '_' ) ] ( cve ) ;
7064 setTimeout ( ( ) => updateCVE ( cve ) , 100 ) ;
7165 } ) ;
7266 cveButtons . push ( b ) ;
7367 cveContainer . append ( t . content ) ;
7468}
7569
76- const jQueryVersions = new Set ( Array . from ( cveMap , ( [ name , value ] ) => ( value . versions ) ) . flat ( ) ) ;
77-
7870for ( const v of jQueryVersions ) {
7971 const o = document . createElement ( 'option' ) ;
8072 o . textContent = v ;
@@ -84,12 +76,24 @@ for (const v of jQueryVersions) {
8476const VERSION = 'VERSION' ;
8577const PATCHED = 'PATCHED' ;
8678
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+ }
8996
90- if ( sessionVersion ) {
91- selVersion . value = sessionVersion ;
92- chkPatched . checked = sessionPatched === 'true' ;
9397}
9498
9599changeVersion ( ) ;
@@ -120,8 +124,7 @@ function changeVersion() {
120124 document . querySelectorAll ( '.cve' ) . forEach ( e => e . classList . remove ( 'hide' ) ) ;
121125 } ;
122126
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 ;
125128
126129 s . onerror = function ( ) {
127130 if ( typeof jQuery !== 'undefined' ) {
@@ -194,6 +197,7 @@ function CVE_2011_4969(cve){
194197 handleJQuerySyntaxError ( e ) ;
195198 }
196199
200+ history . replaceState ( null , null , ' ' ) ; // clear out location.hash completely
197201
198202}
199203
@@ -219,7 +223,7 @@ function CVE_2012_6708(cve) {
219223}
220224
221225function CVE_2015_9251 ( cve ) {
222- $ . get ( "http://localhost:4000 /jqueryxss" , function ( content ) {
226+ $ . get ( "http://localhost:3334 /jqueryxss" , function ( content ) {
223227 // since we are relying on an external resource for this test, guard against regression
224228 const expected = `triggerCVE('${ cve [ 0 ] } ');` ;
225229 const expectedContentFound = content === expected ;
@@ -228,7 +232,6 @@ function CVE_2015_9251(cve) {
228232 error ( 'CVE-2015-9251 CANNOT BE VERIFIED!' ) ;
229233 }
230234 } ) ;
231- // log('CVE-2015-9251 is not reproducible in 1.2.6, so ignore this test');
232235}
233236
234237function CVE_2019_11358 ( cve ) {
@@ -266,3 +269,15 @@ function CVE_2020_23064(cve) {
266269 // this is a duplicate of CVE-2020-11023
267270 CVE_2020_11023 ( cve ) ;
268271}
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