summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorRichard Hansen <rhansen@rhansen.org>2022-06-09 20:41:50 -0400
committerEli Zaretskii <eliz@gnu.org>2022-06-16 09:55:49 +0300
commit6c3b6149d9e7c882729634dc5a7e647daeecfdf3 (patch)
tree5690c2fcaec05edda7a42d4cbe6edc9fca1b7fe8 /lisp/emacs-lisp
parentdcee64d4bf2751a6b67716e2e43267d9e73640cd (diff)
downloademacs-6c3b6149d9e7c882729634dc5a7e647daeecfdf3.tar.gz
emacs-6c3b6149d9e7c882729634dc5a7e647daeecfdf3.tar.bz2
emacs-6c3b6149d9e7c882729634dc5a7e647daeecfdf3.zip
bindat (strz): Write null terminator after variable length string
* lisp/emacs-lisp/bindat.el (bindat--pack-strz): Explicitly write a null byte after packing a variable-length string to ensure proper termination when packing to a pre-allocated string. * doc/lispref/processes.texi (Bindat Types): Update documentation. * test/lisp/emacs-lisp/bindat-tests.el (bindat-test--str-strz-prealloc): Update tests.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/bindat.el3
1 files changed, 3 insertions, 0 deletions
diff --git a/lisp/emacs-lisp/bindat.el b/lisp/emacs-lisp/bindat.el
index 9ba89a5e3fe..46e2a4901c3 100644
--- a/lisp/emacs-lisp/bindat.el
+++ b/lisp/emacs-lisp/bindat.el
@@ -450,6 +450,9 @@ e.g. corresponding to STRUCT.FIELD1[INDEX2].FIELD3..."
;; need to scan the input string looking for a null byte.
(error "Null byte encountered in input strz string"))
(aset bindat-raw (+ bindat-idx i) (aref v i)))
+ ;; Explicitly write a null terminator in case the user provided a
+ ;; pre-allocated string to bindat-pack that wasn't zeroed first.
+ (aset bindat-raw (+ bindat-idx len) 0)
(setq bindat-idx (+ bindat-idx len 1))))
(defun bindat--pack-bits (len v)