[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
scratch/igc b0a209e9204: Don't put string data pointers into xmalloc'd m
From: |
Pip Cet |
Subject: |
scratch/igc b0a209e9204: Don't put string data pointers into xmalloc'd memory (bug#75292) |
Date: |
Fri, 3 Jan 2025 14:45:27 -0500 (EST) |
branch: scratch/igc
commit b0a209e9204b01bab4a8259b948365a0a9235ab1
Author: Pip Cet <pipcet@protonmail.com>
Commit: Pip Cet <pipcet@protonmail.com>
Don't put string data pointers into xmalloc'd memory (bug#75292)
* src/callproc.c (make_environment_block, call_process): Duplicate
strings, and unwind-protect.
(geten_internal_1): Add FIXME.
---
src/callproc.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/src/callproc.c b/src/callproc.c
index 3f2c60a2151..451a708fc05 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -544,13 +544,17 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int
filefd,
args[i] = encode_coding_string (&argument_coding, args[i], 1);
}
for (i = 4; i < nargs; i++)
- new_argv[i - 3] = SSDATA (args[i]);
+ {
+ new_argv[i - 3] = xstrdup (SSDATA (args[i]));
+ record_unwind_protect_ptr (xfree, new_argv[i - 3]);
+ }
new_argv[i - 3] = 0;
}
else
new_argv[1] = 0;
path = ENCODE_FILE (path);
- new_argv[0] = SSDATA (path);
+ new_argv[0] = xstrdup (SSDATA (path));
+ record_unwind_protect_ptr (xfree, new_argv[0]);
discard_output = FIXNUMP (buffer) || (NILP (buffer) && NILP (output_file));
@@ -1696,6 +1700,8 @@ getenv_internal_1 (const char *var, ptrdiff_t varlen,
char **value,
{
if (SBYTES (entry) > varlen && SREF (entry, varlen) == '=')
{
+ /* FIXME/igc: does this pointer ever leak to
+ non-MPS-visible memory? */
*value = SSDATA (entry) + (varlen + 1);
*valuelen = SBYTES (entry) - (varlen + 1);
return 1;
@@ -1924,7 +1930,11 @@ make_environment_block (Lisp_Object current_dir)
for (tem = Vprocess_environment;
CONSP (tem) && STRINGP (XCAR (tem));
tem = XCDR (tem))
- new_env = add_env (env, new_env, SSDATA (XCAR (tem)));
+ {
+ char *safe_string = xstrdup (SSDATA (XCAR (tem)));
+ record_unwind_protect_ptr (xfree, safe_string);
+ new_env = add_env (env, new_env, safe_string);
+ }
*new_env = 0;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- scratch/igc b0a209e9204: Don't put string data pointers into xmalloc'd memory (bug#75292),
Pip Cet <=