* Problem report #23
@ 2006-04-11 15:49 Dan Nicolaescu
2006-05-11 2:24 ` Problem report #23 FALSE Kenichi Handa
0 siblings, 1 reply; 2+ messages in thread
From: Dan Nicolaescu @ 2006-04-11 15:49 UTC (permalink / raw)
CID: 23
Checker: FORWARD_NULL (help)
File: emacs/src/coding.c
Function: code_convert_region
Description: Variable "(coding)->cmp_data" tracked as NULL was dereferenced.
Event var_compare_op: Added "(coding)->cmp_data" due to comparison "(coding)->cmp_data == 0"
Also see events: [var_deref_op]
At conditional (1): "(coding)->cmp_data == 0" taking true path
5682 if (coding->type != coding_type_ccl
5683 && (! coding->cmp_data || coding->cmp_data->used == 0))
5684 {
5685 int from_byte_orig = from_byte, to_byte_orig = to_byte;
5686
At conditional (2): "from < ((current_buffer)->text)->gpt" taking true path
At conditional (3): "((current_buffer)->text)->gpt < to" taking true path
5687 if (from < GPT && GPT < to)
5688 move_gap_both (from, from_byte);
At conditional (4): "(to_byte - from_byte) > shrink_conversion_region_threshhold" taking true path
At conditional (5): "encodep != 0" taking false path
At conditional (6): "0" taking false path
5689 SHRINK_CONVERSION_REGION (&from_byte, &to_byte, coding, NULL, encodep);
At conditional (7): "from_byte == to_byte" taking true path
At conditional (8): "encodep != 0" taking false path
At conditional (9): "(coding)->post_read_conversion == Qnil" taking true path
At conditional (10): "(coding)->common_flags & 1 == 0" taking false path
5690 if (from_byte == to_byte
5691 && (encodep || NILP (coding->post_read_conversion))
5692 && ! CODING_REQUIRE_FLUSHING (coding))
5693 {
5694 coding->produced = len_byte;
5695 coding->produced_char = len;
5696 if (!replace)
5697 /* We must record and adjust for this new text now. */
5698 adjust_after_insert (from, from_byte_orig, to, to_byte_orig, len);
5699 coding_free_composition_data (coding);
5700 return 0;
5701 }
5702
5703 head_skip = from_byte - from_byte_orig;
5704 tail_skip = to_byte_orig - to_byte;
5705 total_skip = head_skip + tail_skip;
5706 from += head_skip;
5707 to -= tail_skip;
5708 len -= total_skip; len_byte -= total_skip;
5709 }
5710
5711 /* For conversion, we must put the gap before the text in addition to
5712 making the gap larger for efficient decoding. The required gap
5713 size starts from 2000 which is the magic number used in make_gap.
5714 But, after one batch of conversion, it will be incremented if we
5715 find that it is not enough . */
5716 require = 2000;
5717
At conditional (11): "((current_buffer)->text)->gap_size < require" taking true path
5718 if (GAP_SIZE < require)
5719 make_gap (require - GAP_SIZE);
5720 move_gap_both (from, from_byte);
5721
5722 inserted = inserted_byte = 0;
5723
5724 GAP_SIZE += len_byte;
5725 ZV -= len;
5726 Z -= len;
5727 ZV_BYTE -= len_byte;
5728 Z_BYTE -= len_byte;
5729
At conditional (12): "(((current_buffer)->text)->gpt - 1) < ((current_buffer)->text)->beg_unchanged" taking true path
5730 if (GPT - BEG < BEG_UNCHANGED)
5731 BEG_UNCHANGED = GPT - BEG;
At conditional (13): "(((current_buffer)->text)->z - ((current_buffer)->text)->gpt) < ((current_buffer)->text)->end_unchanged" taking true path
5732 if (Z - GPT < END_UNCHANGED)
5733 END_UNCHANGED = Z - GPT;
5734
At conditional (14): "encodep == 0" taking true path
At conditional (15): "(coding)->src_multibyte != 0" taking true path
5735 if (!encodep && coding->src_multibyte)
5736 {
5737 /* Decoding routines expects that the source text is unibyte.
5738 We must convert 8-bit characters of multibyte form to
5739 unibyte. */
5740 int len_byte_orig = len_byte;
5741 len_byte = str_as_unibyte (GAP_END_ADDR - len_byte, len_byte);
At conditional (16): "len_byte < len_byte_orig" taking true path
5742 if (len_byte < len_byte_orig)
5743 safe_bcopy (GAP_END_ADDR - len_byte_orig, GAP_END_ADDR - len_byte,
5744 len_byte);
5745 coding->src_multibyte = 0;
5746 }
5747
5748 for (;;)
5749 {
5750 int result;
5751
5752 /* The buffer memory is now:
5753 +--------+converted-text+---------+-------original-text-------+---+
5754 |<-from->|<--inserted-->|---------|<--------len_byte--------->|---|
5755 |<---------------------- GAP ----------------------->| */
5756 src = GAP_END_ADDR - len_byte;
5757 dst = GPT_ADDR + inserted_byte;
5758
At conditional (17): "encodep != 0" taking false path
5759 if (encodep)
5760 result = encode_coding (coding, src, dst, len_byte, 0);
5761 else
5762 {
At conditional (18): "(coding)->composing != 0" taking true path
5763 if (coding->composing != COMPOSITION_DISABLED)
Event var_deref_op: Variable "(coding)->cmp_data" tracked as NULL was dereferenced.
Also see events: [var_compare_op]
5764 coding->cmp_data->char_offset = from + inserted;
5765 result = decode_coding (coding, src, dst, len_byte, 0);
5766 }
5767
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: Problem report #23 FALSE
2006-04-11 15:49 Problem report #23 Dan Nicolaescu
@ 2006-05-11 2:24 ` Kenichi Handa
0 siblings, 0 replies; 2+ messages in thread
From: Kenichi Handa @ 2006-05-11 2:24 UTC (permalink / raw)
In article <200604111549.k3BFnVRs015129@scanner2.ics.uci.edu>, Dan Nicolaescu <dann@ics.uci.edu> writes:
> CID: 23
> Checker: FORWARD_NULL (help)
> File: emacs/src/coding.c
> Function: code_convert_region
> Description: Variable "(coding)->cmp_data" tracked as NULL was dereferenced.
I see no bug here (same as Problem report #13). This part
may be not clear:
> At conditional (18): "(coding)->composing != 0" taking true path
> 5763 if (coding->composing != COMPOSITION_DISABLED)
> Event var_deref_op: Variable "(coding)->cmp_data" tracked as NULL was dereferenced.
> Also see events: [var_compare_op]
> 5764 coding->cmp_data->char_offset = from + inserted;
> 5765 result = decode_coding (coding, src, dst, len_byte, 0);
> 5766 }
> 5767
But, the code surely allocates coding->cmp_data if
(coding->composing != COMPOSITION_DISABLED) at line 5677.
---
Kenichi Handa
handa@m17n.org
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2006-05-11 2:24 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-04-11 15:49 Problem report #23 Dan Nicolaescu
2006-05-11 2:24 ` Problem report #23 FALSE Kenichi Handa
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).