emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Problem report #35


From: Dan Nicolaescu
Subject: Problem report #35
Date: Tue, 11 Apr 2006 08:49:35 -0700

CID: 35
Checker: OVERRUN_STATIC (help)
File: emacs/src/coding.c
Function: detect_coding_iso2022
Description: Overrun of static array 
"(((coding_system_table[2])->spec).iso2022).requested_designation" of size 255 
at position 255 with index variable "charset"

1435              ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);

At conditional (1): "c >= 40" taking true path
At conditional (2): "c <= 47" taking true path

1436              if (c >= '(' && c <= '/')
1437                {
1438                  /* Designation sequence for a charset of dimension 1.  */

At conditional (3): "src >= src_end" taking false path
At conditional (4): "multibytep != 0" taking true path
At conditional (5): "c1 == 158" taking true path
At conditional (6): "0" taking false path

1439                  ONE_MORE_BYTE_CHECK_MULTIBYTE (c1, multibytep);

At conditional (7): "c1 < 32" taking false path
At conditional (8): "c1 >= 128" taking false path
At conditional (9): "c >= 44" taking true path
At conditional (10): "charset = iso_charset_table[0][((c >= 44) ? 1 : (0))][c1] 
< 0" taking false path

1440                  if (c1 < ' ' || c1 >= 0x80
1441                      || (charset = iso_charset_table[0][c >= ','][c1]) < 0)
1442                    /* Invalid designation sequence.  Just ignore.  */
1443                    break;
1444                  reg[(c - '(') % 4] = charset;
1445                }
1446              else if (c == '$')
1447                {
1448                  /* Designation sequence for a charset of dimension 2.  */
1449                  ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);
1450                  if (c >= '@' && c <= 'B')
1451                    /* Designation for JISX0208.1978, GB2312, or JISX0208.  
*/
1452                    reg[0] = charset = iso_charset_table[1][0][c];
1453                  else if (c >= '(' && c <= '/')
1454                    {
1455                      ONE_MORE_BYTE_CHECK_MULTIBYTE (c1, multibytep);
1456                      if (c1 < ' ' || c1 >= 0x80
1457                          || (charset = iso_charset_table[1][c >= ','][c1]) 
< 0)
1458                        /* Invalid designation sequence.  Just ignore.  */
1459                        break;
1460                      reg[(c - '(') % 4] = charset;
1461                    }
1462                  else
1463                    /* Invalid designation sequence.  Just ignore.  */
1464                    break;
1465                }
1466              else if (c == 'N' || c == 'O')
1467                {
1468                  /* ESC <Fe> for SS2 or SS3.  */
1469                  mask &= CODING_CATEGORY_MASK_ISO_7_ELSE;
1470                  break;
1471                }
1472              else if (c >= '0' && c <= '4')
1473                {
1474                  /* ESC <Fp> for start/end composition.  */
1475                  if (COMPOSITION_OK (CODING_CATEGORY_IDX_ISO_7))
1476                    mask_found |= CODING_CATEGORY_MASK_ISO_7;
1477                  else
1478                    mask &= ~CODING_CATEGORY_MASK_ISO_7;
1479                  if (COMPOSITION_OK (CODING_CATEGORY_IDX_ISO_7_TIGHT))
1480                    mask_found |= CODING_CATEGORY_MASK_ISO_7_TIGHT;
1481                  else
1482                    mask &= ~CODING_CATEGORY_MASK_ISO_7_TIGHT;
1483                  if (COMPOSITION_OK (CODING_CATEGORY_IDX_ISO_8_1))
1484                    mask_found |= CODING_CATEGORY_MASK_ISO_8_1;
1485                  else
1486                    mask &= ~CODING_CATEGORY_MASK_ISO_8_1;
1487                  if (COMPOSITION_OK (CODING_CATEGORY_IDX_ISO_8_2))
1488                    mask_found |= CODING_CATEGORY_MASK_ISO_8_2;
1489                  else
1490                    mask &= ~CODING_CATEGORY_MASK_ISO_8_2;
1491                  if (COMPOSITION_OK (CODING_CATEGORY_IDX_ISO_7_ELSE))
1492                    mask_found |= CODING_CATEGORY_MASK_ISO_7_ELSE;
1493                  else
1494                    mask &= ~CODING_CATEGORY_MASK_ISO_7_ELSE;
1495                  if (COMPOSITION_OK (CODING_CATEGORY_IDX_ISO_8_ELSE))
1496                    mask_found |= CODING_CATEGORY_MASK_ISO_8_ELSE;
1497                  else
1498                    mask &= ~CODING_CATEGORY_MASK_ISO_8_ELSE;
1499                  break;
1500                }
1501              else
1502                /* Invalid escape sequence.  Just ignore.  */
1503                break;
1504    
1505              /* We found a valid designation sequence for CHARSET.  */
1506              mask &= ~CODING_CATEGORY_MASK_ISO_8BIT;

At conditional (11): "charset == 0" taking false path
At conditional (12): "charset == 158" taking false path
At conditional (13): "charset == 128" taking false path
At conditional (14): "charset >= 0" taking true path
At conditional (15): "charset <= 254" taking false path
At conditional (16): "charset < 240" taking false path
At conditional (17): "((charset >= 0 && charset <= 254 && (Vcharset_table & 
-8)->contents[((charset == 0) ? 0 : ((charset + 128)))] != Qnil) ? ((((0), 
((Vcharset_table & -8)->contents[((charset == 0) ? 0 : ((charset + 128)))] & 
-8))->contents[2] >> 3 == 1) ? 1 : (0)) : (((charset < 240) ? 1 : (0)))) != 0" 
taking false path
At conditional (18): "charset < 240" taking false path

1507              c = MAKE_CHAR (charset, 0, 0);

Event overrun-local: Overrun of static array 
"(((coding_system_table[2])->spec).iso2022).requested_designation" of size 255 
at position 255 with index variable "charset"
At conditional (19): "coding_system_table[2] != 0" taking true path
At conditional (20): "charset == 0" taking false path
At conditional (21): "safe_chars == Qt" taking true path

1508              if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_7, charset, c))
1509                mask_found |= CODING_CATEGORY_MASK_ISO_7;
1510              else
1511                mask &= ~CODING_CATEGORY_MASK_ISO_7;
1512              if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_7_TIGHT, charset, c))
1513                mask_found |= CODING_CATEGORY_MASK_ISO_7_TIGHT;
1514              else
1515                mask &= ~CODING_CATEGORY_MASK_ISO_7_TIGHT;
1516              if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_7_ELSE, charset, c))
1517                mask_found |= CODING_CATEGORY_MASK_ISO_7_ELSE;
1518              else
1519                mask &= ~CODING_CATEGORY_MASK_ISO_7_ELSE;
1520              if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_8_ELSE, charset, c))
1521                mask_found |= CODING_CATEGORY_MASK_ISO_8_ELSE;
1522              else
1523                mask &= ~CODING_CATEGORY_MASK_ISO_8_ELSE;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]