From fa1cdbba31f603e86e0d36a74b755b2604f61e97 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alejandro=20R=20Sede=C3=B1o?= Date: Fri, 5 Apr 2013 01:21:16 -0400 Subject: [PATCH] wire-format: Generated ENCODE-UINT methods now clamp input size --- wire-format.lisp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/wire-format.lisp b/wire-format.lisp index 3c295b7..e78e98f 100644 --- a/wire-format.lisp +++ b/wire-format.lisp @@ -773,17 +773,18 @@ ~& Modifies the buffer, and returns the new index into the buffer.~ ~& Watch out, this function turns off all type checking and array bounds checking." bits) (declare #.$optimize-serialization) - (declare (type (unsigned-byte ,bits) val) - (type (simple-array (unsigned-byte 8)) buffer) - (type fixnum index)) - ;; Seven bits at a time, least significant bits first - (loop do (let ((bits (,ldb (byte 7 0) val))) - (declare (type (unsigned-byte 8) bits)) - (setq val (,ash val -7)) - (setf (aref buffer index) - (ilogior bits (if ,zerop-val 0 128))) - (iincf index)) - until ,zerop-val) + (let ((val (ldb (byte ,bits 0) val))) + (declare (type (unsigned-byte ,bits) val) + (type (simple-array (unsigned-byte 8)) buffer) + (type fixnum index)) + ;; Seven bits at a time, least significant bits first + (loop do (let ((bits (,ldb (byte 7 0) val))) + (declare (type (unsigned-byte 8) bits)) + (setq val (,ash val -7)) + (setf (aref buffer index) + (ilogior bits (if ,zerop-val 0 128))) + (iincf index)) + until ,zerop-val)) (values index buffer)) ;return the buffer to improve 'trace' (defun ,encode-fixed (val buffer index) ,(format nil -- 2.45.2