From bdd013dfbf54a0fa5da20144ff6c49394c4f6488 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 27 Oct 2025 18:54:53 -0400 Subject: [PATCH 1/4] fixes issue 115 --- src/index.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/index.ts b/src/index.ts index 2cacf80..3399cb0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -136,9 +136,12 @@ export const detectFileSync = ( if (opts && opts.sampleSize) { const fd = fs.openSync(filepath, 'r'); - const sample = Buffer.allocUnsafe(opts.sampleSize); + let sample = Buffer.allocUnsafe(opts.sampleSize); - fs.readSync(fd, sample, 0, opts.sampleSize, opts.offset); + const bytesRead = fs.readSync(fd, sample, 0, opts.sampleSize, opts.offset); + if (bytesRead < opts.sampleSize) { + sample = sample.subarray(0, bytesRead); + } fs.closeSync(fd); return detect(sample); } From f444056d1750e3755a93d726abbe061d8a786dd1 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 27 Oct 2025 19:18:37 -0400 Subject: [PATCH 2/4] fixing other case --- src/index.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index 3399cb0..e137a07 100644 --- a/src/index.ts +++ b/src/index.ts @@ -117,10 +117,17 @@ export const detectFile = ( if (opts && opts.sampleSize) { fd = fs.openSync(filepath, 'r'); - const sample: Buffer = Buffer.allocUnsafe(opts.sampleSize); - - fs.read(fd, sample, 0, opts.sampleSize, opts.offset, (err?: Error) => { - handler(err, sample); + let sample = Buffer.allocUnsafe(opts.sampleSize); + + fs.read(fd, sample, 0, opts.sampleSize, opts.offset, (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: Buffer) => { + if (err) { + handler(err, buffer); + } else { + if (bytesRead < opts.sampleSize!) { + sample = sample.subarray(0, bytesRead); + } + handler(null, sample); + } }); return; } From 6ddae795fdb2c5b016a31686c7fd75ec349b6fc3 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Tue, 28 Oct 2025 10:14:20 -0400 Subject: [PATCH 3/4] Update src/index.ts Co-authored-by: Nikita Skovoroda --- src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index e137a07..4050da3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -121,7 +121,7 @@ export const detectFile = ( fs.read(fd, sample, 0, opts.sampleSize, opts.offset, (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: Buffer) => { if (err) { - handler(err, buffer); + handler(err); } else { if (bytesRead < opts.sampleSize!) { sample = sample.subarray(0, bytesRead); From 3eac8f7157aa72c6f70e73cfe0c3f7d7353a9828 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 29 Oct 2025 08:28:08 -0400 Subject: [PATCH 4/4] added test --- src/encoding/ascii.test.ts | 8 ++++++++ src/test/data/encodings/shortascii | 1 + 2 files changed, 9 insertions(+) create mode 100644 src/test/data/encodings/shortascii diff --git a/src/encoding/ascii.test.ts b/src/encoding/ascii.test.ts index 49853b0..85d7c91 100644 --- a/src/encoding/ascii.test.ts +++ b/src/encoding/ascii.test.ts @@ -7,3 +7,11 @@ describe('ASCII', () => { ).toBe('ASCII'); }); }); + +describe('ASCII', () => { + it('should return ASCII', () => { + expect( + chardet.detectFileSync(__dirname + '/../test/data/encodings/shortascii', { sampleSize: 32 }), + ).toBe('ASCII'); + }); +}); \ No newline at end of file diff --git a/src/test/data/encodings/shortascii b/src/test/data/encodings/shortascii new file mode 100644 index 0000000..eba61a7 --- /dev/null +++ b/src/test/data/encodings/shortascii @@ -0,0 +1 @@ +short \ No newline at end of file