This PR fixes a bug when calculating rolling hashes (i.e. get hash of data so far, and then continue to append more data).
One use case for rolling hashes is uploading large files to Google Drive via API. The file is transferred in chunks, and the server response after each chunk contains the MD5 hash of all data received up to that point. It's useful to be able to verify that hash on client and then continue appending data to the hash when sending following chunks.
The problem is caused by .getState() copying the ._hash array by reference into the state object. The values in that array are then mutated by further operations, so contents of state object get changed too. My solution is simply to clone the array.
This PR fixes a bug when calculating rolling hashes (i.e. get hash of data so far, and then continue to append more data).
One use case for rolling hashes is uploading large files to Google Drive via API. The file is transferred in chunks, and the server response after each chunk contains the MD5 hash of all data received up to that point. It's useful to be able to verify that hash on client and then continue appending data to the hash when sending following chunks.
More background on the use case: https://github.com/nodejs/node/issues/29903
Test case:
On current master, output is:
With this patch:
I assume this is not intended behavior.
The problem is caused by
.getState()
copying the._hash
array by reference into the state object. The values in that array are then mutated by further operations, so contents of state object get changed too. My solution is simply to clone the array.