fix bug with response body, add test for download hash

This commit is contained in:
ading2210 2024-11-10 17:40:14 -05:00
parent 8e5a23adf2
commit 82249fe707
6 changed files with 31 additions and 4 deletions

View file

@ -1,5 +1,8 @@
# Libcurl.js Changelog:
## v0.6.20 (11/10/24):
- Fix bug with response body getting corrupted
## v0.6.19 (11/1/24):
- Improve download speeds even more by reducing memory copies
- Fix wrong mime type being reported in response blob

View file

@ -86,8 +86,8 @@ If you are using the single file version (`libcurl_full.js`), the `libcurl.load_
Alternatively, prebuilt versions can be found on NPM and jsDelivr. You can use the [following URLs](https://cdn.jsdelivr.net/npm/libcurl.js@latest/) to load libcurl.js from a third party CDN.
```
https://cdn.jsdelivr.net/npm/libcurl.js@0.6.7/libcurl.js
https://cdn.jsdelivr.net/npm/libcurl.js@0.6.7/libcurl.wasm
https://cdn.jsdelivr.net/npm/libcurl.js@0.6.20/libcurl.js
https://cdn.jsdelivr.net/npm/libcurl.js@0.6.20/libcurl.wasm
```
To know when libcurl.js has finished loading, you can use the `libcurl_load` DOM event. The `libcurl_abort` event will trigger if the Emscripten runtime gets aborted due to a critical error. The `libcurl.events` object contains an `EventTarget` where these events will also be emitted.

View file

@ -41,7 +41,8 @@ class CurlSession {
data_callback(request_id, chunk_ptr, chunk_size) {
let data = Module.HEAPU8.subarray(chunk_ptr, chunk_ptr + chunk_size);
this.request_callbacks[request_id].data(data);
let chunk = new Uint8Array(data);
this.request_callbacks[request_id].data(chunk);
}
headers_callback(request_id, chunk_ptr, chunk_size) {

View file

@ -1,6 +1,6 @@
{
"name": "libcurl.js",
"version": "0.6.19",
"version": "0.6.20",
"description": "A port of libcurl to WebAssembly, for proxying HTTPS requests from the browser with full TLS encryption",
"main": "libcurl.mjs",
"exports": {

View file

@ -64,6 +64,9 @@ class JSTest(unittest.TestCase):
def test_post(self):
self.run_test("test_post.js")
def test_download_hash(self):
self.run_test("test_download_hash.js")
if __name__ == "__main__":
unittest.main()

View file

@ -0,0 +1,20 @@
//https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#examples
async function digestMessage(msgUint8) {
const hashBuffer = await window.crypto.subtle.digest("SHA-256", msgUint8); // hash the message
const hashArray = Array.from(new Uint8Array(hashBuffer)); // convert buffer to byte array
const hashHex = hashArray
.map((b) => b.toString(16).padStart(2, "0"))
.join(""); // convert bytes to hex string
return hashHex;
}
async function test() {
let url = "https://curl.se/download/curl-8.11.0.tar.gz";
let expected_hash = "264537d90e58d2b09dddc50944baf3c38e7089151c8986715e2aaeaaf2b8118f";
let r = await libcurl.fetch(url);
let msg = new Uint8Array(await r.arrayBuffer());
let hash = await digestMessage(msg);
assert(hash === expected_hash, "unexpected hash of downloaded data");
}