From: Dan Nicolaescu <dann@ics.uci.edu>
To: emacs-devel@gnu.org
Subject: Problem report #109: base/src/emacs/src/coding.c (decode_coding_utf_16); UNINIT
Date: Tue, 2 Dec 2008 14:17:09 -0800 (PST) [thread overview]
Message-ID: <200812022217.mB2MH9h6021745@mothra.ics.uci.edu> (raw)
CID: 109
Checker: UNINIT (help)
File: base/src/emacs/src/coding.c
Function: decode_coding_utf_16
Description: Using uninitialized value "consumed_chars_base"
Event var_decl: Declared variable "consumed_chars_base" without initializer
Also see events: [uninit_use]
1640 int consumed_chars = 0, consumed_chars_base;
1641 int multibytep = coding->src_multibyte;
1642 enum utf_bom_type bom = CODING_UTF_16_BOM (coding);
1643 enum utf_16_endian_type endian = CODING_UTF_16_ENDIAN (coding);
1644 int surrogate = CODING_UTF_16_SURROGATE (coding);
1645 Lisp_Object attr, charset_list;
At conditional (1): "((0), (((0), ((Vcoding_system_hash_table & -8)->key_and_value & -8))->contents[((2 * (coding)->id) + 1)] & -8))->contents[2] == Qdos" taking true path
1646 int eol_crlf = EQ (CODING_ID_EOL_TYPE (coding->id), Qdos);
1647 int byte_after_cr1 = -1, byte_after_cr2 = -1;
1648
At conditional (2): "0" taking false path
1649 CODING_GET_INFO (coding, attr, charset_list);
1650
At conditional (3): "bom == 2" taking true path
1651 if (bom == utf_with_bom)
1652 {
1653 int c, c1, c2;
1654
1655 src_base = src;
At conditional (4): "src == src_end" taking true path
At conditional (5): "src_base < src" taking true path
1656 ONE_MORE_BYTE (c1);
1657 ONE_MORE_BYTE (c2);
1658 c = (c1 << 8) | c2;
1659
1660 if (endian == utf_16_big_endian
1661 ? c != 0xFEFF : c != 0xFFFE)
1662 {
1663 /* The first two bytes are not BOM. Treat them as bytes
1664 for a normal character. */
1665 src = src_base;
1666 coding->errors++;
1667 }
1668 CODING_UTF_16_BOM (coding) = utf_without_bom;
1669 }
1670 else if (bom == utf_detect_bom)
1671 {
1672 /* We have already tried to detect BOM and failed in
1673 detect_coding. */
1674 CODING_UTF_16_BOM (coding) = utf_without_bom;
1675 }
1676
1677 while (1)
1678 {
1679 int c, c1, c2;
1680
1681 src_base = src;
1682 consumed_chars_base = consumed_chars;
1683
1684 if (charbuf + 2 >= charbuf_end)
1685 break;
1686
1687 if (byte_after_cr1 >= 0)
1688 c1 = byte_after_cr1, byte_after_cr1 = -1;
1689 else
1690 ONE_MORE_BYTE (c1);
1691 if (c1 < 0)
1692 {
1693 *charbuf++ = -c1;
1694 continue;
1695 }
1696 if (byte_after_cr2 >= 0)
1697 c2 = byte_after_cr2, byte_after_cr2 = -1;
1698 else
1699 ONE_MORE_BYTE (c2);
1700 if (c2 < 0)
1701 {
1702 *charbuf++ = ASCII_BYTE_P (c1) ? c1 : BYTE8_TO_CHAR (c1);
1703 *charbuf++ = -c2;
1704 continue;
1705 }
1706 c = (endian == utf_16_big_endian
1707 ? ((c1 << 8) | c2) : ((c2 << 8) | c1));
1708
1709 if (surrogate)
1710 {
1711 if (! UTF_16_LOW_SURROGATE_P (c))
1712 {
1713 if (endian == utf_16_big_endian)
1714 c1 = surrogate >> 8, c2 = surrogate & 0xFF;
1715 else
1716 c1 = surrogate & 0xFF, c2 = surrogate >> 8;
1717 *charbuf++ = c1;
1718 *charbuf++ = c2;
1719 coding->errors++;
1720 if (UTF_16_HIGH_SURROGATE_P (c))
1721 CODING_UTF_16_SURROGATE (coding) = surrogate = c;
1722 else
1723 *charbuf++ = c;
1724 }
1725 else
1726 {
1727 c = ((surrogate - 0xD800) << 10) | (c - 0xDC00);
1728 CODING_UTF_16_SURROGATE (coding) = surrogate = 0;
1729 *charbuf++ = 0x10000 + c;
1730 }
1731 }
1732 else
1733 {
1734 if (UTF_16_HIGH_SURROGATE_P (c))
1735 CODING_UTF_16_SURROGATE (coding) = surrogate = c;
1736 else
1737 {
1738 if (eol_crlf && c == '\r')
1739 {
1740 ONE_MORE_BYTE (byte_after_cr1);
1741 ONE_MORE_BYTE (byte_after_cr2);
1742 }
1743 *charbuf++ = c;
1744 }
1745 }
1746 }
1747
1748 no_more_source:
Event uninit_use: Using uninitialized value "consumed_chars_base"
Also see events: [var_decl]
1749 coding->consumed_char += consumed_chars_base;
1750 coding->consumed = src_base - coding->source;
next reply other threads:[~2008-12-02 22:17 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-02 22:17 Dan Nicolaescu [this message]
2008-12-03 1:19 ` Problem report #109: base/src/emacs/src/coding.c (decode_coding_utf_16); UNINIT Kenichi Handa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200812022217.mB2MH9h6021745@mothra.ics.uci.edu \
--to=dann@ics.uci.edu \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).