From 2b98c09fbabf009065d217927fd5936ce0269993 Mon Sep 17 00:00:00 2001 From: roblabla Date: Fri, 11 Sep 2015 22:12:20 +0000 Subject: [PATCH] Slightly fix the broken error handling --- src/datatypes/structures.js | 15 ++++++++++++--- src/transforms/serializer.js | 13 ++++++++++--- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/datatypes/structures.js b/src/datatypes/structures.js index 4e15985..a964aec 100644 --- a/src/datatypes/structures.js +++ b/src/datatypes/structures.js @@ -109,7 +109,10 @@ function readContainer(buffer, offset, typeArgs, rootNode) { tryCatch(() => { readResults = this.read(buffer, offset, typeArgs[index].type, rootNode); }, (e) => { - addErrorField(e, index); + if (typeArgs && typeArgs[index] && typeArgs[index].name) + addErrorField(e, typeArgs[index].name); + else + addErrorField(e, "unknown"); throw e; }); results.size += readResults.size; @@ -127,7 +130,10 @@ function writeContainer(value, buffer, offset, typeArgs, rootNode) { tryCatch(() => { offset = this.write(value[typeArgs[index].name], buffer, offset, typeArgs[index].type, rootNode); }, (e) => { - addErrorField(e, index); + if (typeArgs && typeArgs[index] && typeArgs[index].name) + addErrorField(e, typeArgs[index].name); + else + addErrorField(e, "unknown"); throw e; }); } @@ -146,7 +152,10 @@ function sizeOfContainer(value, typeArgs, rootNode) { else size += this.sizeOf(value[typeArgs[index].name], typeArgs[index].type, rootNode); }, (e) => { - addErrorField(e, index); + if (typeArgs && typeArgs[index] && typeArgs[index].name) + addErrorField(e, typeArgs[index].name); + else + addErrorField(e, "unknown"); throw e; }); } diff --git a/src/transforms/serializer.js b/src/transforms/serializer.js index 0ecd162..9f6fa13 100644 --- a/src/transforms/serializer.js +++ b/src/transforms/serializer.js @@ -71,12 +71,13 @@ function createPacketBuffer(packetId, state, params, isServer) { assert.notEqual(packetId, undefined); var packet = get(packetId, state, !isServer); + var packetName = packetNames[state][!isServer ? 'toServer' : 'toClient'][packetId]; assert.notEqual(packet, null); packet.forEach(function(fieldInfo) { tryCatch(() => { length += proto.sizeOf(params[fieldInfo.name], fieldInfo.type, params); }, (e) => { - e.message = "sizeOf error for " + e.field + " : " + e.message; + e.message = "sizeOf error for " + packetName + "." + e.field + " : " + e.message; throw e; }); }); @@ -93,7 +94,7 @@ function createPacketBuffer(packetId, state, params, isServer) { tryCatch(() => { offset = proto.write(value, buffer, offset, fieldInfo.type, params); }, (e) => { - e.message = "Write error for " + e.field + " : " + e.message; + e.message = "Write error for " + packetName + "." + e.field + " : " + e.message; throw e; }); }); @@ -136,10 +137,16 @@ function parsePacketData(buffer, state, isServer, packetsToParse = {"packet": tr debug("read packetId " + state + "." + packetName + " (0x" + packetId.toString(16) + ")"); } + var packetName = packetNames[state][!isServer ? 'toClient' : 'toServer'][packetId]; var i, fieldInfo, readResults; for(i = 0; i < packetInfo.length; ++i) { fieldInfo = packetInfo[i]; - readResults = proto.read(buffer, cursor, fieldInfo.type, results); + tryCatch(() => { + readResults = proto.read(buffer, cursor, fieldInfo.type, results); + }, (e) => { + e.message = "Read error for " + packetName + "." + e.field + " : " + e.message; + throw e; + }); if(readResults === null) throw new Error("A reader returned null. This is _not_ normal"); if(readResults.error)