mirror of
https://github.com/denoland/deno.git
synced 2024-12-24 08:09:08 -05:00
fix possible range issues for copyBytes in io/util (denoland/deno_std#146)
Original: 2081f03a07
This commit is contained in:
parent
d710f9427a
commit
41829f3e2b
3 changed files with 38 additions and 0 deletions
|
@ -4,6 +4,7 @@ import { Buffer, Reader } from "deno";
|
|||
// from `src`.
|
||||
// Returns the number of bytes copied.
|
||||
export function copyBytes(dst: Uint8Array, src: Uint8Array, off = 0): number {
|
||||
off = Math.max(0, Math.min(off, dst.byteLength));
|
||||
const r = dst.byteLength - off;
|
||||
if (src.byteLength > r) {
|
||||
src = src.subarray(0, r);
|
||||
|
|
36
io/util_test.ts
Normal file
36
io/util_test.ts
Normal file
|
@ -0,0 +1,36 @@
|
|||
import { test, assert } from "../testing/mod.ts";
|
||||
import { copyBytes } from "./util.ts";
|
||||
|
||||
test(function testCopyBytes() {
|
||||
let dst = new Uint8Array(4);
|
||||
|
||||
dst.fill(0);
|
||||
let src = Uint8Array.of(1, 2);
|
||||
let len = copyBytes(dst, src, 0);
|
||||
assert(len === 2);
|
||||
assert.equal(dst, Uint8Array.of(1, 2, 0, 0));
|
||||
|
||||
dst.fill(0);
|
||||
src = Uint8Array.of(1, 2);
|
||||
len = copyBytes(dst, src, 1);
|
||||
assert(len === 2);
|
||||
assert.equal(dst, Uint8Array.of(0, 1, 2, 0));
|
||||
|
||||
dst.fill(0);
|
||||
src = Uint8Array.of(1, 2, 3, 4, 5);
|
||||
len = copyBytes(dst, src);
|
||||
assert(len === 4);
|
||||
assert.equal(dst, Uint8Array.of(1, 2, 3, 4));
|
||||
|
||||
dst.fill(0);
|
||||
src = Uint8Array.of(1, 2);
|
||||
len = copyBytes(dst, src, 100);
|
||||
assert(len === 0);
|
||||
assert.equal(dst, Uint8Array.of(0, 0, 0, 0));
|
||||
|
||||
dst.fill(0);
|
||||
src = Uint8Array.of(3, 4);
|
||||
len = copyBytes(dst, src, -2);
|
||||
assert(len === 2);
|
||||
assert.equal(dst, Uint8Array.of(3, 4, 0, 0));
|
||||
});
|
1
test.ts
1
test.ts
|
@ -14,6 +14,7 @@ import "fs/path/resolve_test.ts";
|
|||
import "fs/path/zero_length_strings_test.ts";
|
||||
import "io/bufio_test.ts";
|
||||
import "io/ioutil_test.ts";
|
||||
import "io/util_test.ts";
|
||||
import "http/http_test.ts";
|
||||
import "http/file_server_test.ts";
|
||||
import "log/test.ts";
|
||||
|
|
Loading…
Reference in a new issue