mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-18 17:50:29 +02:00
Ensure that shared substrings are handled properly when passed to
a system call or other foreign function. Many thanks to Tim Pierce! * symbols.h (SCM_COERCE_SUBSTR): new macro. * filesys.c (scm_chmod, scm_rename, scm_delete_file, scm_mkdir, scm_rmdir, scm_opendir, scm_chdir, scm_symlink, scm_readlink, scm_lstat), ports.c (scm_sys_make_void_port), posix.c (scm_utime, scm_putenv, scm_setlocale, scm_mknod), stime.c (setzone, scm_strftime), vports.c (scm_make_soft_port), backtrace.c (scm_display_error_message): use RO macros when strings may be RO. * error.c (scm_error_scm), filesys.c (scm_chown, scm_chmod, scm_rename, scm_delete_file, scm_mkdir, scm_rmdir, scm_opendir, scm_chdir, scm_symlink, scm_readlink, scm_lstat), ioext.c (scm_freopen, scm_duplicate_port, scm_fdopen), net_db.c (scm_gethost, scm_getnet, scm_getproto, scm_getserv), ports.c (scm_sys_make_void_port), posix.c (scm_getgrgid, scm_utime, scm_setlocale, scm_mknod), stime.c (setzone, scm_strptime, scm_strftime), vports.c (scm_make_soft_port): use SCM_COERCE_SUBSTR to make sure shared substrings are null-terminated.
This commit is contained in:
parent
dec4cca94f
commit
89958ad0ef
10 changed files with 95 additions and 43 deletions
|
@ -206,6 +206,9 @@ scm_freopen (filename, modes, port)
|
|||
SCM_ARG1, s_freopen);
|
||||
SCM_ASSERT (SCM_NIMP (modes) && SCM_ROSTRINGP (modes), modes, SCM_ARG2,
|
||||
s_freopen);
|
||||
|
||||
SCM_COERCE_SUBSTR (filename);
|
||||
SCM_COERCE_SUBSTR (modes);
|
||||
SCM_DEFER_INTS;
|
||||
SCM_ASSERT (SCM_NIMP (port) && SCM_FPORTP (port), port, SCM_ARG3, s_freopen);
|
||||
SCM_SYSCALL (f = freopen (SCM_ROCHARS (filename), SCM_ROCHARS (modes),
|
||||
|
@ -247,6 +250,8 @@ scm_duplicate_port (oldpt, modes)
|
|||
s_duplicate_port);
|
||||
SCM_ASSERT (SCM_NIMP (modes) && SCM_ROSTRINGP (modes), modes, SCM_ARG2,
|
||||
s_duplicate_port);
|
||||
|
||||
SCM_COERCE_SUBSTR (modes);
|
||||
SCM_NEWCELL (newpt);
|
||||
SCM_DEFER_INTS;
|
||||
oldfd = fileno ((FILE *)SCM_STREAM (oldpt));
|
||||
|
@ -346,6 +351,7 @@ scm_fdopen (fdes, modes)
|
|||
SCM_ASSERT (SCM_INUMP (fdes), fdes, SCM_ARG1, s_fdopen);
|
||||
SCM_ASSERT (SCM_NIMP (modes) && SCM_ROSTRINGP (modes), modes, SCM_ARG2,
|
||||
s_fdopen);
|
||||
SCM_COERCE_SUBSTR (modes);
|
||||
SCM_NEWCELL (port);
|
||||
SCM_DEFER_INTS;
|
||||
f = fdopen (SCM_INUM (fdes), SCM_ROCHARS (modes));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue