summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hansen <rhansen@rhansen.org>2022-05-28 23:10:44 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2022-06-01 22:18:24 -0400
commite66d6b379345063900eb3e99db6367c69a860cdf (patch)
tree9faf504d4cb0297209cedb94bd49e46c1e0b4d99
parent916492cb6d531e3ae16f1dc361725d60074af844 (diff)
downloademacs-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.el4
-rw-r--r--test/lisp/emacs-lisp/bindat-tests.el2
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")))