Mercurial > emacs
changeset 22536:e4bcb7cb0038
(read_process_output): While processing carryover,
check the size of p->decoding_buf.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Mon, 22 Jun 1998 00:24:57 +0000 |
parents | fd9324c5a498 |
children | 7947a4ea28a8 |
files | src/process.c |
diffstat | 1 files changed, 13 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/process.c Sun Jun 21 14:52:08 1998 +0000 +++ b/src/process.c Mon Jun 22 00:24:57 1998 +0000 @@ -2855,13 +2855,19 @@ carryover = nbytes - coding->consumed; if (carryover > 0) { - /* We must move the data carried over to the tail of - decoding buffer. We are sure that the size of decoding - buffer (decided by decoding_buffer_size) is large enough - to contain them. */ - bcopy (chars + nbytes - carryover, - (XSTRING (p->decoding_buf)->data - + STRING_BYTES (XSTRING (p->decoding_buf)) - carryover), + /* Copy the carryover bytes to the end of p->decoding_buf, to + be processed on the next read. Since decoding_buffer_size + asks for an extra amount of space beyond the maximum + expected for the output, there should always be sufficient + space for the carryover (which is by definition a sequence + of bytes that was not long enough to be decoded, and thus + has a bounded length). */ + if (STRING_BYTES (XSTRING (p->decoding_buf)) + < coding->produced + carryover) + abort (); + bcopy (chars + coding->consumed, + XSTRING (p->decoding_buf)->data + + STRING_BYTES (XSTRING (p->decoding_buf)) - carryover, carryover); XSETINT (p->decoding_carryover, carryover); }