diff options
author | Richard Hansen <rhansen@rhansen.org> | 2022-06-09 20:41:50 -0400 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2022-06-16 09:55:49 +0300 |
commit | 6c3b6149d9e7c882729634dc5a7e647daeecfdf3 (patch) | |
tree | 5690c2fcaec05edda7a42d4cbe6edc9fca1b7fe8 /lisp/emacs-lisp | |
parent | dcee64d4bf2751a6b67716e2e43267d9e73640cd (diff) | |
download | emacs-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.el | 3 |
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) |