summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@linux-m68k.org>2009-06-28 20:12:20 +0000
committerAndreas Schwab <schwab@linux-m68k.org>2009-06-28 20:12:20 +0000
commitb96075879aaebbdf674c39b8d886c2fee2c9215e (patch)
treead44a13776193b433c9a787c2dbdd17aec6debd1 /src
parent485422be112eba944a27ecea02c2e5d103ad5175 (diff)
downloademacs-b96075879aaebbdf674c39b8d886c2fee2c9215e.tar.gz
(send_process): Keep decoded string in a local
variable and protect it from GC. (Bug#3521)
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog5
-rw-r--r--src/process.c12
2 files changed, 12 insertions, 5 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index af619a9a26a..8bee945b136 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2009-06-28 Andreas Schwab <schwab@linux-m68k.org>
+
+ * process.c (send_process): Keep decoded string in a local
+ variable and protect it from GC. (Bug#3521)
+
2009-06-28 Eli Zaretskii <eliz@gnu.org>
* term.c (create_tty_output) [MSDOS]: #ifdef away.
diff --git a/src/process.c b/src/process.c
index 2fdb2c2cbb0..38980d28383 100644
--- a/src/process.c
+++ b/src/process.c
@@ -5550,10 +5550,11 @@ send_process (proc, buf, len, object)
struct Lisp_Process *p = XPROCESS (proc);
int rv;
struct coding_system *coding;
- struct gcpro gcpro1;
+ struct gcpro gcpro1, gcpro2;
SIGTYPE (*volatile old_sigpipe) ();
+ Lisp_Object dst_object = Qnil;
- GCPRO1 (object);
+ GCPRO2 (object, dst_object);
if (p->raw_status_new)
update_status (p);
@@ -5632,7 +5633,8 @@ send_process (proc, buf, len, object)
}
len = coding->produced;
- buf = SDATA (coding->dst_object);
+ dst_object = coding->dst_object;
+ buf = SDATA (dst_object);
}
if (pty_max_bytes == 0)
@@ -5764,7 +5766,7 @@ send_process (proc, buf, len, object)
/* Running filters might relocate buffers or strings.
Arrange to relocate BUF. */
if (CODING_REQUIRE_ENCODING (coding))
- offset = buf - SDATA (coding->dst_object);
+ offset = buf - SDATA (dst_object);
else if (BUFFERP (object))
offset = BUF_PTR_BYTE_POS (XBUFFER (object), buf);
else if (STRINGP (object))
@@ -5777,7 +5779,7 @@ send_process (proc, buf, len, object)
#endif
if (CODING_REQUIRE_ENCODING (coding))
- buf = offset + SDATA (coding->dst_object);
+ buf = offset + SDATA (dst_object);
else if (BUFFERP (object))
buf = BUF_BYTE_ADDRESS (XBUFFER (object), offset);
else if (STRINGP (object))