1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-10 11:43:01 +03:00

Merge pull request #886 from NodeRedis/fix-parser

Fix js parser regression.

Fixes #881 
Fixes #880 
Fixes #875
This commit is contained in:
Ruben Bridgewater
2015-10-10 03:39:49 +02:00
3 changed files with 19 additions and 18 deletions

View File

@@ -17,8 +17,8 @@ install:
- '@ECHO Redis Started'
# Get the latest stable version of Node 0.STABLE.latest
- ps: Install-Product node $env:nodejs_version
# Typical npm stuff.
- npm install
# Typical npm stuff. Use msvs 2013 for the hiredis parser
- npm install --msvs_version=2013
# Post-install test scripts.
test_script:

View File

@@ -2,11 +2,6 @@
var util = require('util');
function Packet(type, size) {
this.type = type;
this.size = +size;
}
function ReplyParser(return_buffers) {
this.name = exports.name;
this.return_buffers = return_buffers;
@@ -23,7 +18,10 @@ function IncompleteReadBuffer(message) {
util.inherits(IncompleteReadBuffer, Error);
ReplyParser.prototype._parseResult = function (type) {
var start, end, offset, packetHeader;
var start = 0,
end = 0,
offset = 0,
packetHeader = 0;
if (type === 43 || type === 45) { // + or -
// up to the delimiter
@@ -62,14 +60,14 @@ ReplyParser.prototype._parseResult = function (type) {
// buffer in memory
offset = this._offset - 1;
packetHeader = new Packet(type, this.parseHeader());
packetHeader = this.parseHeader();
// packets with a size of -1 are considered null
if (packetHeader.size === -1) {
if (packetHeader === -1) {
return null;
}
end = this._offset + packetHeader.size;
end = this._offset + packetHeader;
start = this._offset;
if (end > this._buffer.length) {
@@ -83,15 +81,15 @@ ReplyParser.prototype._parseResult = function (type) {
return this._buffer.slice(start, end);
}
return this._buffer.toString(this._encoding, start, end);
} else { // *
} else if (type === 42) { // *
offset = this._offset;
packetHeader = new Packet(type, this.parseHeader());
packetHeader = this.parseHeader();
if (packetHeader.size < 0) {
if (packetHeader < 0) {
return null;
}
if (packetHeader.size > this._bytesRemaining()) {
if (packetHeader > this._bytesRemaining()) {
this._offset = offset - 1;
throw new IncompleteReadBuffer('Wait for more data.');
}
@@ -101,7 +99,7 @@ ReplyParser.prototype._parseResult = function (type) {
offset = this._offset - 1;
for (i = 0; i < packetHeader.size; i++) {
for (i = 0; i < packetHeader; i++) {
ntype = this._buffer[this._offset++];
if (this._offset > this._buffer.length) {
@@ -184,7 +182,7 @@ ReplyParser.prototype.append = function (newBuffer) {
ReplyParser.prototype.parseHeader = function () {
var end = this._packetEndOffset(),
value = this._buffer.toString('ascii', this._offset, end - 1);
value = this._buffer.toString('ascii', this._offset, end - 1) | 0;
this._offset = end + 1;

View File

@@ -113,8 +113,11 @@ module.exports = {
}
var parsers = ['javascript'];
var protocols = ['IPv4'];
if (process.platform !== 'win32') {
try {
require('hiredis');
parsers.push('hiredis');
} catch (e) {}
if (process.platform !== 'win32') {
protocols.push('IPv6', '/tmp/redis.sock');
}
var options = [{