]> git.eshelyaron.com Git - emacs.git/commitdiff
bindat (strz): Fix off-by-one bug in computed length
authorRichard Hansen <rhansen@rhansen.org>
Sun, 29 May 2022 03:10:44 +0000 (23:10 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 2 Jun 2022 02:18:24 +0000 (22:18 -0400)
* 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.

lisp/emacs-lisp/bindat.el
test/lisp/emacs-lisp/bindat-tests.el

index c6d64975ecae03355fbd0e6513e2c3c5e463f731..b236e47e5b900d9e851a44dca454fb71a3d1203d 100644 (file)
@@ -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
index c8545a216be97f530b13771f036494fce6893390..cb7b6fe1c203ce30794a0455abeccd956890c9d6 100644 (file)
 
 (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")))