You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					143 lines
				
				2.4 KiB
			
		
		
			
		
	
	
					143 lines
				
				2.4 KiB
			| 
											3 years ago
										 | 'use strict' | ||
|  | 
 | ||
|  | const t = require('tap') | ||
|  | const build = require('..') | ||
|  | 
 | ||
|  | const stringify = build({ | ||
|  |   title: 'Example Schema', | ||
|  |   type: 'object', | ||
|  |   properties: { | ||
|  |     firstName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     lastName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     age: { | ||
|  |       description: 'Age in years"', | ||
|  |       type: 'integer' | ||
|  |     }, | ||
|  |     [(() => "phra'&& process.exit(1) ||'phra")()]: {}, | ||
|  |     now: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     reg: { | ||
|  |       type: 'string', | ||
|  |       default: 'a\'&& process.exit(1) ||\'' | ||
|  |     }, | ||
|  |     obj: { | ||
|  |       type: 'object', | ||
|  |       properties: { | ||
|  |         bool: { | ||
|  |           type: 'boolean' | ||
|  |         } | ||
|  |       } | ||
|  |     }, | ||
|  |     '"\'w00t': { | ||
|  |       type: 'string', | ||
|  |       default: '"\'w00t' | ||
|  |     }, | ||
|  |     arr: { | ||
|  |       type: 'array', | ||
|  |       items: { | ||
|  |         type: 'object', | ||
|  |         properties: { | ||
|  |           'phra\' && process.exit(1)//': { | ||
|  |             type: 'number' | ||
|  |           }, | ||
|  |           str: { | ||
|  |             type: 'string' | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |   }, | ||
|  |   required: ['now'], | ||
|  |   patternProperties: { | ||
|  |     '.*foo$': { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     test: { | ||
|  |       type: 'number' | ||
|  |     }, | ||
|  |     'phra\'/ && process.exit(1) && /\'': { | ||
|  |       type: 'number' | ||
|  |     }, | ||
|  |     '"\'w00t.*////': { | ||
|  |       type: 'number' | ||
|  |     } | ||
|  |   }, | ||
|  |   additionalProperties: { | ||
|  |     type: 'string' | ||
|  |   } | ||
|  | }) | ||
|  | 
 | ||
|  | const obj = { | ||
|  |   firstName: 'Matteo', | ||
|  |   lastName: 'Collina', | ||
|  |   age: 32, | ||
|  |   now: new Date(), | ||
|  |   foo: 'hello"', | ||
|  |   bar: "world'", | ||
|  |   'fuzz"': 42, | ||
|  |   "me'": 42, | ||
|  |   numfoo: 42, | ||
|  |   test: 42, | ||
|  |   strtest: '23', | ||
|  |   arr: [{ 'phra\' && process.exit(1)//': 42 }], | ||
|  |   obj: { bool: true }, | ||
|  |   notmatch: 'valar morghulis', | ||
|  |   notmatchobj: { a: true }, | ||
|  |   notmatchnum: 42 | ||
|  | } | ||
|  | 
 | ||
|  | // pass if it does not crash
 | ||
|  | const json = stringify(obj) | ||
|  | JSON.parse(json) | ||
|  | 
 | ||
|  | const stringify2 = build({ | ||
|  |   title: 'Example Schema', | ||
|  |   type: 'object', | ||
|  |   patternProperties: { | ||
|  |     '"\'w00t.*////': { | ||
|  |       type: 'number' | ||
|  |     } | ||
|  |   } | ||
|  | }) | ||
|  | 
 | ||
|  | t.same(JSON.parse(stringify2({ | ||
|  |   '"\'phra////': 42, | ||
|  |   asd: 42 | ||
|  | })), { | ||
|  | }) | ||
|  | 
 | ||
|  | const stringify3 = build({ | ||
|  |   title: 'Example Schema', | ||
|  |   type: 'object', | ||
|  |   properties: { | ||
|  |     "\"phra\\'&&(console.log(42))//||'phra": {} | ||
|  |   } | ||
|  | }) | ||
|  | 
 | ||
|  | // this verifies the escaping
 | ||
|  | JSON.parse(stringify3({ | ||
|  |   '"phra\'&&(console.log(42))//||\'phra': 42 | ||
|  | })) | ||
|  | 
 | ||
|  | const stringify4 = build({ | ||
|  |   title: 'Example Schema', | ||
|  |   type: 'object', | ||
|  |   properties: { | ||
|  |     '"\\\\\\\\\'w00t': { | ||
|  |       type: 'string', | ||
|  |       default: '"\'w00t' | ||
|  |     } | ||
|  |   } | ||
|  | }) | ||
|  | 
 | ||
|  | t.same(JSON.parse(stringify4({})), { | ||
|  |   '"\\\\\\\\\'w00t': '"\'w00t' | ||
|  | }) | ||
|  | 
 | ||
|  | t.pass('no crashes') |