gbranden pushed a commit to branch master
in repository groff.
commit e8e78aad57634640d1cab556cadc2ca800cca220
Author: Bruno Haible <[email protected]>
AuthorDate: Sun Aug 2 13:54:53 2026 +0200
pic: Fix undefined behaviour, part 2.
This change fixes this ASAN finding:
ERROR: AddressSanitizer: alloc-dealloc-mismatch (malloc vs operator delete
[]) on 0x6db4f9de0790
#0 0x609b694769ed in operator delete[](void*)
/home/runner/work/llvm-project/llvm-project/compiler-rt/lib/asan/asan_new_delete.cpp:179:46
#1 0x609b694c553f in command_object::~command_object()
/devel/groff/src/preproc/pic/object.cpp:488:3
#2 0x609b694c5594 in command_object::~command_object()
/devel/groff/src/preproc/pic/object.cpp:487:1
#3 0x609b694a7450 in parse_cleanup()
/devel/groff/src/preproc/pic/pic.ypp:1918:5
#4 0x609b694bf43e in do_picture(_IO_FILE*)
/devel/groff/src/preproc/pic/main.cpp:303:5
#5 0x609b694bdf4f in do_file(char const*)
/devel/groff/src/preproc/pic/main.cpp:395:2
#6 0x609b694c0241 in main /devel/groff/src/preproc/pic/main.cpp:691:7
0x6db4f9de0790 is located 0 bytes inside of 7-byte region
[0x6db4f9de0790,0x6db4f9de0797)
allocated by thread T0 here:
#0 0x609b69432ee4 in malloc
/home/runner/work/llvm-project/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp:67:3
#1 0x609b69514657 in strsave(char const*)
/devel/groff/src/libs/libgroff/strsave.cpp:36:33
#2 0x609b694b6c03 in yylex()
/devel/groff/src/preproc/pic/lex.cpp:1916:25
#3 0x609b6947b944 in yyparse()
/devel/groff/src/preproc/pic/pic.cpp:2354:16
#4 0x609b694bf3e0 in do_picture(_IO_FILE*)
/devel/groff/src/preproc/pic/main.cpp:299:9
#5 0x609b694bdf4f in do_file(char const*)
/devel/groff/src/preproc/pic/main.cpp:395:2
#6 0x609b694c0241 in main /devel/groff/src/preproc/pic/main.cpp:691:7
SUMMARY: AddressSanitizer: alloc-dealloc-mismatch
/devel/groff/src/preproc/pic/object.cpp:488:3 in
command_object::~command_object()
* src/preproc/pic/object.cpp (command_object::~command_object): Free the
s field using free(), not delete[].
---
src/preproc/pic/object.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/preproc/pic/object.cpp b/src/preproc/pic/object.cpp
index 32255a850..a57329235 100644
--- a/src/preproc/pic/object.cpp
+++ b/src/preproc/pic/object.cpp
@@ -468,7 +468,7 @@ object_spec::~object_spec()
}
class command_object : public object {
- char *s;
+ char *s; // to be freed with free()
const char *filename;
int lineno;
public:
@@ -485,7 +485,7 @@ command_object::command_object(char *p, const char *fn, int
ln)
command_object::~command_object()
{
- delete[] s;
+ free(s);
}
void command_object::print()
_______________________________________________
groff-commit mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/groff-commit