先核來源與已訂規則
本例只收標準字母表及所需補位的標準 base64。Q!UI= 有不支援符號,寬鬆 Buffer 卻仍解成 AB。更正先核格式,再重編碼對原文是否完全一致。
| 紀錄 | 輸入 JSON |
|---|---|
| 原例輸入 | {"encoded":"Q!UI="} |
比較兩條實際路徑
更正暫停非標準 Q!UI=。只看解出位元組,不能證明來源表示已符約定傳送格式。
| 路徑 | 輸出 JSON |
|---|---|
| 錯誤路徑 | {"accepted":true,"bytes":[65,66]} |
| 更正路徑 | {"accepted":false,"error":"noncanonical-base64","original":"Q!UI="} |
import {DatabaseSync} from 'node:sqlite';
import {TextDecoder} from 'node:util';
import {inflateSync} from 'node:zlib';
import {posix} from 'node:path';
import {createHash} from 'node:crypto';
const rows=(db,sql)=>db.prepare(sql).all().map(r=>({...r}));
const failed=(action)=>{try{action();return null;}catch(e){return {code:e.errcode??e.code??e.name};}};
import assert from 'node:assert/strict';
const run=function run(i,corrected=true){
const bytes=Buffer.from(i.encoded,'base64');
if(corrected&&(!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(i.encoded)||bytes.toString('base64')!==i.encoded))return {accepted:false,error:'noncanonical-base64',original:i.encoded};
return {accepted:true,bytes:[...bytes]};
};
const cases=[{"label":"misleading base","input":{"encoded":"Q!UI="},"expected":{"accepted":true,"bytes":[65,66]},"corrected":false},{"label":"corrected base","input":{"encoded":"Q!UI="},"expected":{"accepted":false,"error":"noncanonical-base64","original":"Q!UI="},"corrected":true},{"label":"canonical two-byte encoding","input":{"encoded":"QUI="},"expected":{"accepted":true,"bytes":[65,66]},"corrected":true},{"label":"canonical empty bytes","input":{"encoded":""},"expected":{"accepted":true,"bytes":[]},"corrected":true}];
for(const test of cases){
const actual=run(test.input,test.corrected);
assert.deepEqual(actual,test.expected,test.label);
console.log(test.label,actual);
}
下次載入前核邊界
QUI= 得 [65,66];此選填內容約定容許標準空編碼,結果為零位元組陣列。
| 情況 | 輸入 JSON | 預期輸出 JSON |
|---|---|---|
| 標準兩位元組編碼 | {"encoded":"QUI="} | {"accepted":true,"bytes":[65,66]} |
| 標準空內容編碼 | {"encoded":""} | {"accepted":true,"bytes":[]} |
解到 AB,Q!UI= 就合格嗎?
查看參考答案
不是,來源違反明訂格式。錯值留待查,標準 QUI= 才收。