Skip to content

Commit e5add43

Browse files
committed
fix: fix parser ending properly
1 parent da35b1c commit e5add43

5 files changed

Lines changed: 32 additions & 0 deletions

File tree

lib/feedme.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,14 @@ module.exports = class FeedMe extends Writable {
5454
this._parser.write(data, encoding, callback);
5555
}
5656

57+
_final(callback) {
58+
if (this._parser) {
59+
this._parser.end(callback);
60+
} else {
61+
callback(null);
62+
}
63+
}
64+
5765
done() {
5866
return this._parser.done();
5967
}

lib/jsonfeedparser.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,11 @@ module.exports = class JSONFeedParser extends Writable {
154154
callback(null);
155155
}
156156

157+
_final(callback) {
158+
this.parser.end();
159+
callback(null);
160+
}
161+
157162
done() {
158163
if (!this._buffer) { return; }
159164
let root = this._currObj[this._currKey];

lib/xmlfeedparser.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,11 @@ module.exports = class XMLFeedParser extends Writable {
168168
callback(null);
169169
}
170170

171+
_final(callback) {
172+
this.parser.end();
173+
callback(null);
174+
}
175+
171176
// Called when done parsing the document.
172177
// Returns entire document in object form.
173178
done() {

test/assets/badfeed.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<uhoh<<<<

test/bad-test.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,15 @@ describe('Parse a feed with no items', () => {
3939
fs.createReadStream(file).pipe(parser);
4040
});
4141
});
42+
43+
describe('Parse a badly formatted feed', () => {
44+
it('Parser gives an error', (done) => {
45+
const file = path.join(__dirname, 'assets', 'badfeed.xml');
46+
const parser = new FeedMe();
47+
parser.on('error', (err) => {
48+
assert.ok(/Unexpected end/.test(err.message), `Error message: ${err.message}`);
49+
done();
50+
});
51+
fs.createReadStream(file).pipe(parser);
52+
});
53+
});

0 commit comments

Comments
 (0)