koa-plugins/node_modules/fastcgi-client/lib/parsekv.js
2020-03-01 17:38:34 +01:00

38 lines
1.3 KiB
JavaScript

'use strict';
var parsePair = function(msgData, start){
if(msgData.length - start < 1) throw new Error('Unexpected server message: illegal key pair format.');
var keyLen = msgData.readUInt8(start, true);
if(keyLen > 127) {
if(msgData.length - start < 4) throw new Error('Unexpected server message: illegal key pair format.');
keyLen = (msgData.readInt32BE(start, true) & 0x7fffffff);
start += 4;
} else {
start++;
}
if(msgData.length - start < 1) throw new Error('Unexpected server message: illegal key pair format.');
var valueLen = msgData.readUInt8(start, true);
if(valueLen > 127) {
if(msgData.length - start < 4) throw new Error('Unexpected server message: illegal key pair format.');
valueLen = (msgData.readInt32BE(start, true) & 0x7fffffff);
start = start + 4;
} else {
start++;
}
if(msgData.length - start < keyLen + valueLen) throw new Error('Unexpected server message: illegal key pair format.');
return {
key: msgData.toString('utf8', start, start + keyLen),
value: msgData.toString('utf8', start + keyLen, start + keyLen + valueLen),
end: start + keyLen + valueLen
};
};
module.exports = function(msgData){
var res = {};
for(var pos = 0; pos < msgData.length;) {
var pair = parsePair(msgData, pos);
res[pair.key] = pair.value;
pos = pair.end;
}
return res;
};