@@ -33,11 +33,12 @@ function parseSimpleString(parser) {
33
33
* @param parser
34
34
* @param start
35
35
* @param end
36
+ * @param noBuffer
36
37
* @returns {* }
37
38
*/
38
- function convertBufferRange ( parser , start , end ) {
39
+ function convertBufferRange ( parser , start , end , noBuffer ) {
39
40
// If returnBuffers is active, all return values are returned as buffers besides numbers and errors
40
- if ( parser . optionReturnBuffers === true ) {
41
+ if ( ! noBuffer && parser . optionReturnBuffers === true ) {
41
42
return parser . buffer . slice ( start , end ) ;
42
43
}
43
44
@@ -48,9 +49,10 @@ function convertBufferRange(parser, start, end) {
48
49
* Parse a '+' redis simple string response but forward the offsets
49
50
* onto convertBufferRange to generate a string.
50
51
* @param parser
52
+ * @param noBuffer
51
53
* @returns {* }
52
54
*/
53
- function parseSimpleStringViaOffset ( parser ) {
55
+ function parseSimpleStringViaOffset ( parser , noBuffer ) {
54
56
var start = parser . offset ;
55
57
var offset = parser . offset ;
56
58
var length = parser . buffer . length ;
@@ -61,7 +63,7 @@ function parseSimpleStringViaOffset(parser) {
61
63
var c2 = parser . buffer [ offset ++ ] ;
62
64
if ( c2 === 10 ) { // \n
63
65
parser . offset = offset ;
64
- return convertBufferRange ( parser , start , offset - 2 ) ;
66
+ return convertBufferRange ( parser , start , offset - 2 , noBuffer ) ;
65
67
}
66
68
}
67
69
}
@@ -74,7 +76,14 @@ function parseSimpleStringViaOffset(parser) {
74
76
* @returns {* }
75
77
*/
76
78
function parseLength ( parser ) {
77
- var string = parseSimpleString ( parser ) ;
79
+ var string ;
80
+ /* istanbul ignore if */
81
+ if ( parser . buffer . length > 4096 ) {
82
+ string = parseSimpleStringViaOffset ( parser , true ) ;
83
+ } else {
84
+ string = parseSimpleString ( parser ) ;
85
+ }
86
+
78
87
if ( string !== undefined ) {
79
88
var length = + string ;
80
89
if ( length === - 1 ) {
0 commit comments