| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent e01dec4 commit 315ca42
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -604,6 +604,8 @@ Readable.prototype.setEncoding = function(enc) { | |||
| 604 | 604 | for (const data of state.buffer.slice(state.bufferIndex)) { | |
| 605 | 605 | content += decoder.write(data); | |
| 606 | 606 | } | |
| 607 | + if ((state[kState] & kEnded) !== 0) | ||
| 608 | + content += decoder.end(); | ||
| 607 | 609 | state.buffer.length = 0; | |
| 608 | 610 | state.bufferIndex = 0; | |
| 609 | 611 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -58,3 +58,48 @@ const assert = require('assert'); | |||
| 58 | 58 | assert.deepStrictEqual(chunks, ['🎉']); | |
| 59 | 59 | }); | |
| 60 | 60 | } | |
| 61 | + | ||
| 62 | + { | ||
| 63 | + // Call .setEncoding() before the stream starts flowing, after _read() | ||
| 64 | + // has buffered the first chunk of a split character. | ||
| 65 | + const chunks = [ | ||
| 66 | + Buffer.from([0xf0, 0x9f]), | ||
| 67 | + Buffer.from([0x8e, 0x89]), | ||
| 68 | + null, | ||
| 69 | + ]; | ||
| 70 | + const r = new Readable({ | ||
| 71 | + read() { | ||
| 72 | + this.push(chunks.shift()); | ||
| 73 | + }, | ||
| 74 | + }); | ||
| 75 | + | ||
| 76 | + r.read(0); | ||
| 77 | + assert.strictEqual(r.readableFlowing, null); | ||
| 78 | + assert.strictEqual(r.readableLength, 2); | ||
| 79 | + | ||
| 80 | + r.setEncoding('utf8'); | ||
| 81 | + const received = []; | ||
| 82 | + r.on('data', (chunk) => received.push(chunk)); | ||
| 83 | + | ||
| 84 | + process.nextTick(() => { | ||
| 85 | + assert.deepStrictEqual(received, ['🎉']); | ||
| 86 | + }); | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + { | ||
| 90 | + // Call .setEncoding() after EOF while the buffer contains an | ||
| 91 | + // incomplete character. | ||
| 92 | + const r = new Readable({ read() {} }); | ||
| 93 | + | ||
| 94 | + r.push(Buffer.from([0xf0])); | ||
| 95 | + r.push(Buffer.from([0x9f])); | ||
| 96 | + r.push(null); | ||
| 97 | + | ||
| 98 | + r.setEncoding('utf8'); | ||
| 99 | + const chunks = []; | ||
| 100 | + r.on('data', (chunk) => chunks.push(chunk)); | ||
| 101 | + | ||
| 102 | + process.nextTick(() => { | ||
| 103 | + assert.deepStrictEqual(chunks, ['�']); | ||
| 104 | + }); | ||
| 105 | + } | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments