Merge pull request #29 from roblabla/bugfix-serverAsserts

Bugfix server asserts. closes #22
This commit is contained in:
Andrew Kelley 2013-01-29 09:42:47 -08:00
commit 5f4f8c529d
2 changed files with 40 additions and 6 deletions

View File

@ -29,6 +29,11 @@ Client.prototype.setSocket = function(socket) {
while (true) { while (true) {
parsed = parsePacket(incomingBuffer, self.isServer); parsed = parsePacket(incomingBuffer, self.isServer);
if (! parsed) break; if (! parsed) break;
if (parsed.error) {
this.emit('error', parsed.error);
this.end("ProtocolError");
return;
}
packet = parsed.results; packet = parsed.results;
incomingBuffer = incomingBuffer.slice(parsed.size); incomingBuffer = incomingBuffer.slice(parsed.size);
self.emit(packet.id, packet); self.emit(packet.id, packet);

View File

@ -727,9 +727,17 @@ function readEntityMetadata(buffer, offset) {
type = item >> 5; type = item >> 5;
typeName = entityMetadataTypes[type]; typeName = entityMetadataTypes[type];
dataType = types[typeName]; dataType = types[typeName];
assert.ok(dataType, "unrecognized entity metadata type " + type); if (!dataType) {
return {
error: new Error("unrecognized entity metadata type " + type)
}
}
reader = dataType[0]; reader = dataType[0];
assert.ok(reader, "missing reader for entity metadata type " + type); if (!reader) {
return {
error: new Error("missing reader for entity metadata type " + type)
}
}
results = reader(buffer, cursor); results = reader(buffer, cursor);
if (! results) return null; if (! results) return null;
metadata.push({ metadata.push({
@ -808,7 +816,11 @@ function readMapChunkBulk (buffer, offset) {
}); });
} }
assert.strictEqual(chunkColumnCount, meta.length); if (chunkColumnCount !== meta.length) {
return {
error: new Error("ChunkColumnCount different from length of meta")
}
}
return { return {
value: { value: {
@ -1163,7 +1175,9 @@ LongWriter.prototype.write = function(buffer, offset) {
function get(packetId, toServer) { function get(packetId, toServer) {
var packetInfo = packets[packetId]; var packetInfo = packets[packetId];
assert.ok(packetInfo, "unrecognized packet id: " + packetId); if (!packetInfo) {
return null;
}
return Array.isArray(packetInfo) ? return Array.isArray(packetInfo) ?
packetInfo : packetInfo :
toServer ? toServer ?
@ -1175,6 +1189,7 @@ function createPacketBuffer(packetId, params, isServer) {
var size = 1; var size = 1;
var fields = [ new UByteWriter(packetId) ]; var fields = [ new UByteWriter(packetId) ];
var packet = get(packetId, !isServer); var packet = get(packetId, !isServer);
assert.notEqual(packet, null);
packet.forEach(function(fieldInfo) { packet.forEach(function(fieldInfo) {
var value = params[fieldInfo.name]; var value = params[fieldInfo.name];
var Writer = types[fieldInfo.type][1]; var Writer = types[fieldInfo.type][1];
@ -1198,14 +1213,28 @@ function parsePacket(buffer, isServer) {
var size = 1; var size = 1;
var results = { id: packetId }; var results = { id: packetId };
var packetInfo = get(packetId, isServer); var packetInfo = get(packetId, isServer);
assert.ok(packetInfo, "Unrecognized packetId: " + packetId); if (packetInfo == null) {
return {
error: new Error("Unrecognized packetId: " + packetId)
}
}
var i, fieldInfo, read, readResults; var i, fieldInfo, read, readResults;
for (i = 0; i < packetInfo.length; ++i) { for (i = 0; i < packetInfo.length; ++i) {
fieldInfo = packetInfo[i]; fieldInfo = packetInfo[i];
read = types[fieldInfo.type][0]; read = types[fieldInfo.type][0];
assert.ok(read, "missing reader for data type: " + fieldInfo.type); if (!read) {
return {
error: new Error("missing reader for data type: " + fieldInfo.type)
}
}
readResults = read(buffer, size); readResults = read(buffer, size);
if (readResults) { if (readResults) {
// if readResults.error is undef, error stays undef'd
if (readResults.error) {
return {
error: readResults.error
}
}
results[fieldInfo.name] = readResults.value; results[fieldInfo.name] = readResults.value;
size += readResults.size; size += readResults.size;
} else { } else {