* insdel.c (count_size_as_multibyte): Check for string overflow.
This commit is contained in:
parent
2b4560a850
commit
06d6db334e
2 changed files with 12 additions and 2 deletions
|
|
@ -1,5 +1,7 @@
|
|||
2011-05-16 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* insdel.c (count_size_as_multibyte): Check for string overflow.
|
||||
|
||||
* character.c (lisp_string_width): Check for string overflow.
|
||||
Use EMACS_INT, not int, for string indexes and lengths; in
|
||||
particular, 2nd arg is now EMACS_INT, not int. Do not crash if
|
||||
|
|
|
|||
12
src/insdel.c
12
src/insdel.c
|
|
@ -20,6 +20,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
|
||||
#include <config.h>
|
||||
#include <setjmp.h>
|
||||
|
||||
#include <intprops.h>
|
||||
|
||||
#include "lisp.h"
|
||||
#include "intervals.h"
|
||||
#include "buffer.h"
|
||||
|
|
@ -581,14 +584,19 @@ count_size_as_multibyte (const unsigned char *ptr, EMACS_INT nbytes)
|
|||
for (i = 0; i < nbytes; i++)
|
||||
{
|
||||
unsigned int c = *ptr++;
|
||||
int n;
|
||||
|
||||
if (ASCII_CHAR_P (c))
|
||||
outgoing_nbytes++;
|
||||
n = 1;
|
||||
else
|
||||
{
|
||||
c = BYTE8_TO_CHAR (c);
|
||||
outgoing_nbytes += CHAR_BYTES (c);
|
||||
n = CHAR_BYTES (c);
|
||||
}
|
||||
|
||||
if (INT_ADD_OVERFLOW (outgoing_nbytes, n))
|
||||
string_overflow ();
|
||||
outgoing_nbytes += n;
|
||||
}
|
||||
|
||||
return outgoing_nbytes;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue