1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-02-15 04:32:24 +00:00
cde/src/lib/libast/sfio
Martijn Dekker 8b07d2a011 Fix various crashes by removing invalid memccpy() use
The sfputr() function (put out a null-terminated string) contained
a use of memccpy() that was invalid and could cause crashes,
because the buffer it was copying into could overlap or even be
identical with the buffer being copied from.

Among (probably) other things, this commit fixes a crash in 'print
-v' (print a compound variable structure) on macOS, that caused the
comvar.sh and comvario.sh regression tests to fail spectacularly.
Now they pass.

Issue discovered and fixed by Kurtis Rader in the abandoned ksh2020
branch; this commit backports the fix. He wrote:

| #if _lib_memccpy && !__ia64 /* these guys may never get it right */
|
| The problem is that assertion is wrong. It implies that the libc
| implementation of memccpy() on IA64 is broken. Which is
| incorrect. The problem is the AST sfputr() function is depending
| on what is explicitly undefined behavior in the face of
| overlapping source and destination buffers.
| [...] Using memccpy() simply complicates the code and is unlikely
| to be measurably, let alone noticeably, faster.

Further discussion/analysis: https://github.com/att/ast/issues/78

src/lib/libast/sfio/sfputr.c:
- Remove memccpy use. Always use the manual copying loop.

(cherry picked from commit fbe3c83335256cb714a4aa21f555083c9f1d71d8)
2020-06-12 01:45:16 +02:00
..
_sfclrerr.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfdlen.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfeof.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sferror.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sffileno.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfgetc.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfgetl.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfgetl2.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfgetu.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfgetu2.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfllen.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfopen.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfputc.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfputd.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfputl.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfputm.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfputu.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfslen.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfstacked.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfulen.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
_sfvalue.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfclose.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfclrlock.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfcvt.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfdisc.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfdlen.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfecvt.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfexcept.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfextern.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sffcvt.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sffilbuf.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfflsbuf.c C code bug fixes 2020-02-12 13:09:47 -05:00
sfgetd.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfgetl.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfgetm.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfgetr.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfgetu.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfhdr.h patches to build on freebsd 12 2020-02-24 12:58:22 -05:00
sfllen.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfmode.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfmove.c C code bug fixes 2020-02-12 13:09:47 -05:00
sfmutex.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfnew.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfnotify.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfnputc.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfopen.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfpeek.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfpkrd.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfpoll.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfpool.c C code bug fixes 2020-02-12 13:09:47 -05:00
sfpopen.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfprintf.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfprints.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfpurge.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfputd.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfputl.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfputm.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfputr.c Fix various crashes by removing invalid memccpy() use 2020-06-12 01:45:16 +02:00
sfputu.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfraise.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfrd.c C code bug fixes 2020-02-12 13:09:47 -05:00
sfread.c C code bug fixes 2020-02-12 13:09:47 -05:00
sfreserve.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfresize.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfscanf.c Fix 80 typos in comments 2020-06-12 01:45:12 +02:00
sfseek.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfset.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfsetbuf.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfsetfd.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfsize.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfsk.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfstack.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfstrtod.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfstrtof.h Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfswap.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfsync.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sftable.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sftell.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sftmp.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfungetc.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfvprintf.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfvscanf.c Fix 80 typos in comments 2020-06-12 01:45:12 +02:00
sfwalk.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfwr.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
sfwrite.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
vthread.h Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00