53 lines
5.1 KiB
JavaScript
53 lines
5.1 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {createRequire} from 'node:module';
|
|
const require=createRequire(import.meta.url);
|
|
const {extractEncodedDocuments}=require('../packages/core/encoded-documents.cjs');
|
|
const pdf=Buffer.from('%PDF-1.4\nsynthetic bounded document');
|
|
test('JSON nested values and keys yield private original PDF bytes including base64url',()=>{
|
|
for(const value of [{nested:[{file:pdf.toString('base64')}]},{[pdf.toString('base64url')]:true}]){
|
|
const result=extractEncodedDocuments(Buffer.from(JSON.stringify(value)));assert.equal(result.complete,true);assert.equal(result.parts.length,1);assert.deepEqual(result.parts[0].bytes,pdf);
|
|
result.dispose();assert.ok(result.parts[0].bytes.every(byte=>byte===0));assert.notEqual(pdf[0],0);
|
|
}
|
|
});
|
|
test('data URLs preserve declared MIME, percent decoding and exact decoded content',()=>{
|
|
const result=extractEncodedDocuments(Buffer.from('data:application/pdf;base64,'+encodeURIComponent(pdf.toString('base64'))));
|
|
assert.equal(result.complete,true);assert.equal(result.parts[0].mime,'application/pdf');assert.deepEqual(result.parts[0].bytes,pdf);result.dispose();
|
|
});
|
|
test('invalid carriers and decoding budgets cannot become complete coverage',()=>{
|
|
for(const value of ['data:application/pdf;base64,%%%','data:application/pdf;base64,abcde','{"file":'])assert.equal(extractEncodedDocuments(Buffer.from(value),{jsonRequired:true}).complete,false);
|
|
assert.equal(extractEncodedDocuments(Buffer.from(pdf.toString('base64')),{maxDecodedBytes:1}).complete,false);
|
|
const result=extractEncodedDocuments(Buffer.from(JSON.stringify([pdf.toString('base64'),Buffer.from('%PDF-1.4\nother').toString('base64')])) ,{maxParts:1});assert.equal(result.complete,false);result.dispose();
|
|
});
|
|
test('ordinary text is unchanged and duplicate encoded documents use one private part',()=>{
|
|
assert.equal(extractEncodedDocuments(Buffer.from('ordinary public text')).parts.length,0);
|
|
const result=extractEncodedDocuments(Buffer.from(JSON.stringify([pdf.toString('base64'),pdf.toString('base64')])));assert.equal(result.complete,true);assert.equal(result.parts.length,1);result.dispose();
|
|
});
|
|
test('embedded and URL-encoded data URLs receive typed binary coverage without rejecting plain source code',()=>{
|
|
const data='data:application/pdf;base64,'+pdf.toString('base64');
|
|
for(const value of ['file='+encodeURIComponent(data),'<input value="'+data+'">','document='+pdf.toString('base64')]){
|
|
const result=extractEncodedDocuments(Buffer.from(value));assert.equal(result.complete,true);assert.ok(result.parts.some(part=>part.bytes.equals(pdf)));result.dispose();
|
|
}
|
|
assert.equal(extractEncodedDocuments(Buffer.from('{ let publicValue = 1; }')).complete,true);
|
|
});
|
|
test('duplicate encoding does not consume part capacity; different declared MIME is independently checked',()=>{
|
|
const value=pdf.toString('base64'),duplicate=extractEncodedDocuments(Buffer.from(JSON.stringify([value,value])),{maxParts:1});assert.equal(duplicate.complete,true);duplicate.dispose();
|
|
const distinct=extractEncodedDocuments(Buffer.from(JSON.stringify(['data:application/pdf;base64,'+value,'data:image/jpeg;base64,'+value])));assert.equal(distinct.parts.length,2);distinct.dispose();
|
|
const one=extractEncodedDocuments(Buffer.from('data:application/pdf;base64,'+value),{maxParts:1});assert.equal(one.complete,true);assert.equal(one.parts.length,1);one.dispose();
|
|
});
|
|
test('large collections and deep JSON exceed bounded traversal without decoded release',()=>{
|
|
const array=extractEncodedDocuments(Buffer.from(JSON.stringify(Array.from({length:100},()=>0))),{maxNodes:10});assert.equal(array.complete,false);assert.equal(array.parts.length,0);
|
|
let value=pdf.toString('base64');for(let index=0;index<10;index++)value={next:value};const deep=extractEncodedDocuments(Buffer.from(JSON.stringify(value)),{maxDepth:4});assert.equal(deep.complete,false);deep.dispose();
|
|
});
|
|
test('review regressions cover JSON percent carriers, textual envelopes and strict scalar JSON',()=>{
|
|
const uri='data:application/pdf;base64,'+pdf.toString('base64');
|
|
for(const body of [{file:encodeURIComponent(uri)},{[encodeURIComponent(uri)]:true}]){
|
|
const result=extractEncodedDocuments(Buffer.from(JSON.stringify(body)),{jsonRequired:true});assert.equal(result.complete,true);assert.ok(result.parts.some(part=>part.bytes.equals(pdf)));result.dispose();
|
|
}
|
|
const inner=JSON.stringify({file:pdf.toString('base64')}),outer=extractEncodedDocuments(Buffer.from(JSON.stringify({file:Buffer.from(inner).toString('base64')})));
|
|
assert.equal(outer.complete,true);assert.ok(outer.parts.some(part=>part.bytes.toString()===inner));assert.ok(outer.decodedBytes>=inner.length);
|
|
const nested=extractEncodedDocuments(outer.parts.find(part=>part.bytes.toString()===inner).bytes,{maxDecodedBytes:16777216-outer.decodedBytes});assert.ok(nested.parts.some(part=>part.bytes.equals(pdf)));nested.dispose();outer.dispose();
|
|
assert.equal(extractEncodedDocuments(Buffer.from('not JSON'),{jsonRequired:true}).complete,false);
|
|
const scalar=extractEncodedDocuments(Buffer.from(JSON.stringify(pdf.toString('base64'))),{jsonRequired:true});assert.equal(scalar.complete,true);assert.deepEqual(scalar.parts[0].bytes,pdf);scalar.dispose();
|
|
});
|