From af6899c1f6ecdeb75fcb43bea603e53cbe7a5f04 Mon Sep 17 00:00:00 2001 From: Richard Hansen Date: Sat, 28 May 2022 23:10:44 -0400 Subject: [PATCH 2/7] 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. --- lisp/emacs-lisp/bindat.el | 7 +++---- test/lisp/emacs-lisp/bindat-tests.el | 2 -- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/lisp/emacs-lisp/bindat.el b/lisp/emacs-lisp/bindat.el index c6d64975ec..f66458296a 100644 --- a/lisp/emacs-lisp/bindat.el +++ b/lisp/emacs-lisp/bindat.el @@ -687,10 +687,9 @@ bindat--type (bindat--pcase op ('unpack `(bindat--unpack-strz ,len)) (`(length ,val) - `(cl-incf bindat-idx ,(cond - ((null len) `(length ,val)) - ((numberp len) len) - (t `(or ,len (length ,val)))))) + `(cl-incf bindat-idx ,(if (numberp len) + 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 53c0c359d8..ea6d110b8b 100644 --- a/test/lisp/emacs-lisp/bindat-tests.el +++ b/test/lisp/emacs-lisp/bindat-tests.el @@ -188,12 +188,10 @@ bindat-test--recursive (x strz :pack-val v) :unpack-val x))) (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") "\141\142\143\0"))) -- 2.36.1