From f5d3c117582d25e1aa5b7ea37947653b2276585c Mon Sep 17 00:00:00 2001 From: Masaya Tojo Date: Sun, 4 Aug 2024 18:56:16 +0900 Subject: Check the length of the given bytevector --- pnm/pgm.scm | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'pnm/pgm.scm') diff --git a/pnm/pgm.scm b/pnm/pgm.scm index 6c32dea..0f448f6 100644 --- a/pnm/pgm.scm +++ b/pnm/pgm.scm @@ -28,19 +28,18 @@ (when (or (< maxval 0) (< 65536 maxval)) (error "(pnm pgm) make-pgm: maxval is out of range")) - (let ((data (make-bytevector (* width - height - (if (< maxval 256) - 1 - 2)) - 0))) + (let* ((byte-count (* width height + (if (< maxval 256) + 1 + 2))) + (data (make-bytevector byte-count 0))) (make-pgm-image width height maxval data))) ((width height maxval data) (when (or (< maxval 0) (< 65536 maxval)) (error "(pnm pgm) make-pgm: maxval is out of range")) (if (< maxval 256) - (let () + (let ((byte-count (* width height))) (define (xy->idx x y) (+ x (* y width))) (define (pixel-getter x y) (let ((idx (xy->idx x y))) @@ -48,8 +47,10 @@ (define (pixel-setter x y v) (let ((idx (xy->idx x y))) (bytevector-u8-set! data idx v))) + (unless (= byte-count (bytevector-length data)) + (error (string-append "(pnm pbm) make-pbm-image: Invalid bytevector length" byte-count))) (make-image 'pgm width height maxval data pixel-getter pixel-setter)) - (let () + (let ((byte-count (* width height 2))) (define (xy->idx x y) (+ x (* y width))) (define (pixel-getter x y) (let ((idx (xy->idx x y))) @@ -60,6 +61,8 @@ (let-values (((v1 v2) (split-value v))) (bytevector-u8-set! data idx v1) (bytevector-u8-set! data (+ idx 1) v2)))) + (unless (= byte-count (bytevector-length data)) + (error (string-append "(pnm pbm) make-pbm-image: Invalid bytevector length" byte-count))) (make-image 'pgm width height maxval data pixel-getter pixel-setter)))))) (define (split-value v) -- cgit v1.2.3