diff --git a/lib/parsers/javascript.js b/lib/parsers/javascript.js index 4eb863c380..7da5c3ed14 100644 --- a/lib/parsers/javascript.js +++ b/lib/parsers/javascript.js @@ -22,13 +22,9 @@ JavascriptReplyParser.prototype._parseResult = function (type) { if (type === 43 || type === 58 || type === 45) { // + or : or - // up to the delimiter - end = this._packetEndOffset() - 1; + end = this._packetEndOffset(); start = this._offset; - if (end > this._buffer.length) { - throw new IncompleteReadBuffer('Wait for more data.'); - } - // include the delimiter this._offset = end + 2; @@ -91,13 +87,15 @@ JavascriptReplyParser.prototype._parseResult = function (type) { } return reply; + } else { + return null; } }; JavascriptReplyParser.prototype.execute = function (buffer) { this.append(buffer); - var type, ret, offset; + var type, offset; while (true) { offset = this._offset; @@ -109,30 +107,16 @@ JavascriptReplyParser.prototype.execute = function (buffer) { try { type = this._buffer[this._offset++]; - if (type === 43) { // Strings + - ret = this._parseResult(type); - - this.send_reply(ret); + if (type === 43 || type === 58 || type === 36) { // Strings + // Integers : // Bulk strings $ + this.send_reply(this._parseResult(type)); } else if (type === 45) { // Errors - - ret = this._parseResult(type); - - this.send_error(ret); - } else if (type === 58) { // Integers : - ret = this._parseResult(type); - - this.send_reply(ret); - } else if (type === 36) { // Bulk strings $ - ret = this._parseResult(type); - - this.send_reply(ret); + this.send_error(this._parseResult(type)); } else if (type === 42) { // Arrays * // set a rewind point. if a failure occurs, // wait for the next execute()/append() and try again offset = this._offset - 1; - ret = this._parseResult(type); - - this.send_reply(ret); + this.send_reply(this._parseResult(type)); } else if (type === 10 || type === 13) { break; } else { @@ -162,7 +146,7 @@ JavascriptReplyParser.prototype.append = function (newBuffer) { }; JavascriptReplyParser.prototype.parseHeader = function () { - var end = this._packetEndOffset(), + var end = this._packetEndOffset() + 1, value = this._buffer.toString('ascii', this._offset, end - 1) | 0; this._offset = end + 1; @@ -182,7 +166,6 @@ JavascriptReplyParser.prototype._packetEndOffset = function () { } } - offset++; return offset; };