You've already forked node-redis
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:
@@ -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:
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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 = [{
|
||||
|
Reference in New Issue
Block a user