mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
string_decoder: reset decoder on end
This resets the StringDecoder's state after calling `#end`. Further writes to the decoder will act as if it were a brand new instance, allowing simple reuse. PR-URL: https://github.com/nodejs/node/pull/18494 Fixes: https://github.com/nodejs/node/issues/16564 Refs: https://github.com/nodejs/node/pull/16594 Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
committed by
Anna Henningsen
parent
68783ae0b8
commit
d2a6110d3f
@@ -210,8 +210,11 @@ function utf8Text(buf, i) {
|
||||
// character.
|
||||
function utf8End(buf) {
|
||||
const r = (buf && buf.length ? this.write(buf) : '');
|
||||
if (this.lastNeed)
|
||||
if (this.lastNeed) {
|
||||
this.lastNeed = 0;
|
||||
this.lastTotal = 0;
|
||||
return r + '\ufffd';
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -246,6 +249,8 @@ function utf16End(buf) {
|
||||
const r = (buf && buf.length ? this.write(buf) : '');
|
||||
if (this.lastNeed) {
|
||||
const end = this.lastTotal - this.lastNeed;
|
||||
this.lastNeed = 0;
|
||||
this.lastTotal = 0;
|
||||
return r + this.lastChar.toString('utf16le', 0, end);
|
||||
}
|
||||
return r;
|
||||
@@ -269,8 +274,12 @@ function base64Text(buf, i) {
|
||||
|
||||
function base64End(buf) {
|
||||
const r = (buf && buf.length ? this.write(buf) : '');
|
||||
if (this.lastNeed)
|
||||
return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
|
||||
if (this.lastNeed) {
|
||||
const end = 3 - this.lastNeed;
|
||||
this.lastNeed = 0;
|
||||
this.lastTotal = 0;
|
||||
return r + this.lastChar.toString('base64', 0, end);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user