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);
 	}