diff options
author | Richard Hansen <rhansen@rhansen.org> | 2022-05-28 23:10:44 -0400 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2022-06-01 22:18:24 -0400 |
commit | e66d6b379345063900eb3e99db6367c69a860cdf (patch) | |
tree | 9faf504d4cb0297209cedb94bd49e46c1e0b4d99 | |
parent | 916492cb6d531e3ae16f1dc361725d60074af844 (diff) | |
download | emacs-e66d6b379345063900eb3e99db6367c69a860cdf.tar.gz |
bindat (strz): Fix off-by-one bug in computed length
* lisp/emacs-lisp/bindat.el (strz): Include null terminator when
computing packed string length.
* test/lisp/emacs-lisp/bindat-tests.el (strz): Mark tests as passing.
-rw-r--r-- | lisp/emacs-lisp/bindat.el | 4 | ||||
-rw-r--r-- | test/lisp/emacs-lisp/bindat-tests.el | 2 |
2 files changed, 2 insertions, 4 deletions
diff --git a/lisp/emacs-lisp/bindat.el b/lisp/emacs-lisp/bindat.el index c6d64975eca..b236e47e5b9 100644 --- a/lisp/emacs-lisp/bindat.el +++ b/lisp/emacs-lisp/bindat.el @@ -688,9 +688,9 @@ is the name of a variable that will hold the value we need to pack.") ('unpack `(bindat--unpack-strz ,len)) (`(length ,val) `(cl-incf bindat-idx ,(cond - ((null len) `(length ,val)) + ((null len) `(1+ (length ,val))) ((numberp len) len) - (t `(or ,len (length ,val)))))) + (t `(or ,len (1+ (length ,val))))))) (`(pack . ,args) (macroexp-let2 nil len len `(if ,len diff --git a/test/lisp/emacs-lisp/bindat-tests.el b/test/lisp/emacs-lisp/bindat-tests.el index c8545a216be..cb7b6fe1c20 100644 --- a/test/lisp/emacs-lisp/bindat-tests.el +++ b/test/lisp/emacs-lisp/bindat-tests.el @@ -191,12 +191,10 @@ (let ((spec (bindat-type strz))) (ert-deftest bindat-test--strz-varlen-len () - :expected-result :failed (should (equal (bindat-length spec "") 1)) (should (equal (bindat-length spec "abc") 4))) (ert-deftest bindat-test--strz-varlen-pack () - :expected-result :failed (should (equal (bindat-pack spec "") "\0")) (should (equal (bindat-pack spec "abc") "abc\0"))) |