Skip to content

Commit

Permalink
Prevent possible race condition when reading metadata #3451
Browse files Browse the repository at this point in the history
  • Loading branch information
lovell committed Nov 13, 2022
1 parent 3a64a05 commit df97120
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 2 deletions.
5 changes: 5 additions & 0 deletions docs/changelog.md
Expand Up @@ -4,6 +4,11 @@

Requires libvips v8.13.3

### v0.31.3 - TBD

* Prevent possible race condition awaiting metadata of Stream-based input.
[#3451](https://github.com/lovell/sharp/issues/3451)

### v0.31.2 - 4th November 2022

* Upgrade to libvips v8.13.3 for upstream bug fixes.
Expand Down
9 changes: 7 additions & 2 deletions lib/input.js
Expand Up @@ -469,7 +469,7 @@ function metadata (callback) {
} else {
if (this._isStreamInput()) {
return new Promise((resolve, reject) => {
this.on('finish', () => {
const finished = () => {
this._flattenBufferIn();
sharp.metadata(this.options, (err, metadata) => {
if (err) {
Expand All @@ -478,7 +478,12 @@ function metadata (callback) {
resolve(metadata);
}
});
});
};
if (this.writableFinished) {
finished();
} else {
this.once('finish', finished);
}
});
} else {
return new Promise((resolve, reject) => {
Expand Down
13 changes: 13 additions & 0 deletions test/unit/metadata.js
Expand Up @@ -439,6 +439,19 @@ describe('Image metadata', function () {
);
});

it('Stream in, finish event fires before metadata is requested', (done) => {
const create = { width: 1, height: 1, channels: 3, background: 'red' };
const image1 = sharp({ create }).png().pipe(sharp());
const image2 = sharp({ create }).png().pipe(sharp());
process.nextTick(async () => {
const data1 = await image1.metadata();
assert.strictEqual('png', data1.format);
const data2 = await image2.metadata();
assert.strictEqual('png', data2.format);
done();
});
});

it('Stream', function (done) {
const readable = fs.createReadStream(fixtures.inputJpg);
const pipeline = sharp().metadata(function (err, metadata) {
Expand Down

0 comments on commit df97120

Please sign in to comment.