@@ -153,7 +153,6 @@ function parseBulkString (parser) {
153
153
const offsetEnd = parser . offset + length
154
154
if ( offsetEnd + 2 > parser . buffer . length ) {
155
155
parser . bigStrSize = offsetEnd + 2
156
- parser . bigOffset = parser . offset
157
156
parser . totalChunkSize = parser . buffer . length
158
157
parser . bufferCache . push ( parser . buffer )
159
158
return
@@ -257,7 +256,7 @@ function parseArrayElements (parser, responses, i) {
257
256
}
258
257
const response = parseType ( parser , parser . buffer [ parser . offset ++ ] )
259
258
if ( response === undefined ) {
260
- if ( ! parser . arrayCache . length ) {
259
+ if ( ! parser . arrayCache . length && ! parser . bufferCache . length ) {
261
260
parser . offset = offset
262
261
}
263
262
pushArrayCache ( parser , responses , i )
@@ -366,17 +365,18 @@ function resizeBuffer (length) {
366
365
*/
367
366
function concatBulkString ( parser ) {
368
367
const list = parser . bufferCache
368
+ const oldOffset = parser . offset
369
369
var chunks = list . length
370
370
var offset = parser . bigStrSize - parser . totalChunkSize
371
371
parser . offset = offset
372
372
if ( offset <= 2 ) {
373
373
if ( chunks === 2 ) {
374
- return list [ 0 ] . toString ( 'utf8' , parser . bigOffset , list [ 0 ] . length + offset - 2 )
374
+ return list [ 0 ] . toString ( 'utf8' , oldOffset , list [ 0 ] . length + offset - 2 )
375
375
}
376
376
chunks --
377
377
offset = list [ list . length - 2 ] . length + offset
378
378
}
379
- var res = decoder . write ( list [ 0 ] . slice ( parser . bigOffset ) )
379
+ var res = decoder . write ( list [ 0 ] . slice ( oldOffset ) )
380
380
for ( var i = 1 ; i < chunks - 1 ; i ++ ) {
381
381
res += decoder . write ( list [ i ] )
382
382
}
@@ -394,21 +394,22 @@ function concatBulkString (parser) {
394
394
*/
395
395
function concatBulkBuffer ( parser ) {
396
396
const list = parser . bufferCache
397
- const length = parser . bigStrSize - parser . bigOffset - 2
397
+ const oldOffset = parser . offset
398
+ const length = parser . bigStrSize - oldOffset - 2
398
399
var chunks = list . length
399
400
var offset = parser . bigStrSize - parser . totalChunkSize
400
401
parser . offset = offset
401
402
if ( offset <= 2 ) {
402
403
if ( chunks === 2 ) {
403
- return list [ 0 ] . slice ( parser . bigOffset , list [ 0 ] . length + offset - 2 )
404
+ return list [ 0 ] . slice ( oldOffset , list [ 0 ] . length + offset - 2 )
404
405
}
405
406
chunks --
406
407
offset = list [ list . length - 2 ] . length + offset
407
408
}
408
409
resizeBuffer ( length )
409
410
const start = bufferOffset
410
- list [ 0 ] . copy ( bufferPool , start , parser . bigOffset , list [ 0 ] . length )
411
- bufferOffset += list [ 0 ] . length - parser . bigOffset
411
+ list [ 0 ] . copy ( bufferPool , start , oldOffset , list [ 0 ] . length )
412
+ bufferOffset += list [ 0 ] . length - oldOffset
412
413
for ( var i = 1 ; i < chunks - 1 ; i ++ ) {
413
414
list [ i ] . copy ( bufferPool , bufferOffset )
414
415
bufferOffset += list [ i ] . length
@@ -448,7 +449,6 @@ class JavascriptRedisParser {
448
449
this . offset = 0
449
450
this . buffer = null
450
451
this . bigStrSize = 0
451
- this . bigOffset = 0
452
452
this . totalChunkSize = 0
453
453
this . bufferCache = [ ]
454
454
this . arrayCache = [ ]
@@ -530,7 +530,7 @@ class JavascriptRedisParser {
530
530
const type = this . buffer [ this . offset ++ ]
531
531
const response = parseType ( this , type )
532
532
if ( response === undefined ) {
533
- if ( ! this . arrayCache . length ) {
533
+ if ( ! this . arrayCache . length && ! this . bufferCache . length ) {
534
534
this . offset = offset
535
535
}
536
536
return
0 commit comments