diff options
author | Andy Wingo <wingo@pobox.com> | 2016-05-22 22:33:46 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2016-05-22 22:33:46 +0200 |
commit | 4e288ec2ff9c5387951dcb7f78f3193261228878 (patch) | |
tree | 7ea1407463e1da6d07531831d99d0864b06f6db8 | |
parent | 2c95a2102711c990d81bd8908506cd35b9b71022 (diff) | |
download | guile-4e288ec2ff9c5387951dcb7f78f3193261228878.tar.gz |
Fix range checking in new Scheme-to-C port code
* libguile/ports.c (trampoline_to_c_read, trampoline_to_c_write): Fix
bugs checking ranges of start and count parameters.
-rw-r--r-- | libguile/ports.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/libguile/ports.c b/libguile/ports.c index 445ccc076..ff1db9d35 100644 --- a/libguile/ports.c +++ b/libguile/ports.c @@ -172,10 +172,11 @@ trampoline_to_c_read (SCM port, SCM dst, SCM start, SCM count) size_t c_start, c_count, ret; SCM_VALIDATE_OPPORT (1, port); + SCM_VALIDATE_BYTEVECTOR (2, dst); c_start = scm_to_size_t (start); c_count = scm_to_size_t (count); - SCM_ASSERT_RANGE (2, start, c_start <= c_count); - SCM_ASSERT_RANGE (3, count, c_start+c_count <= scm_c_bytevector_length (dst)); + SCM_ASSERT_RANGE (3, start, c_start <= SCM_BYTEVECTOR_LENGTH (dst)); + SCM_ASSERT_RANGE (4, count, c_count <= SCM_BYTEVECTOR_LENGTH (dst) - c_start); ret = SCM_PORT_TYPE (port)->c_read (port, dst, c_start, c_count); @@ -198,10 +199,11 @@ trampoline_to_c_write (SCM port, SCM src, SCM start, SCM count) size_t c_start, c_count, ret; SCM_VALIDATE_OPPORT (1, port); + SCM_VALIDATE_BYTEVECTOR (2, src); c_start = scm_to_size_t (start); c_count = scm_to_size_t (count); - SCM_ASSERT_RANGE (2, start, c_start <= c_count); - SCM_ASSERT_RANGE (3, count, c_start+c_count <= scm_c_bytevector_length (src)); + SCM_ASSERT_RANGE (3, start, c_start <= SCM_BYTEVECTOR_LENGTH (src)); + SCM_ASSERT_RANGE (4, count, c_count <= SCM_BYTEVECTOR_LENGTH (src) - c_start); ret = SCM_PORT_TYPE (port)->c_write (port, src, c_start, c_count); |