Subject: Re: bug#10617: 24.0.92; Bidi crash reading a message from emacs-devel

From: Nix <[email-masked]>
Date: Mon, 30 Jan 2012 19:11:55 +0000

On 30 Jan 2012, Eli Zaretskii spake thusly:

> From: Nix <[email-masked]>
>> > It would be interesting to see it->current, it->position, it->sp, and
>> > it->string in frames #6 and #8.
>> 
>> Frame 6:
>> 
>> (gdb) print it->current
>> $3 = {
>>   pos = {
>>     charpos = 1430,
>>     bytepos = 1394
>>   },
>>   overlay_string_index = -1,
>>   string_pos = {
>>     charpos = -1,
>>     bytepos = -1
>>   },
>>   dpvec_index = -1
>> }
>> (gdb) print it->position
>> $4 = {
>>   charpos = 1430,
>>   bytepos = 1394
>> }
>
> If bytepos is smaller than charpos, it generally means trouble...

I thought maybe the gap accounted for it -- but this is already
gap-compensated, isn't it? So we have characters of size <1 byte there.
(I sort of doubt that.)

>> (gdb) print it->sp
>> $5 = 0
>> (gdb) print it->string
>> $6 = 12065314
>
> What does "xtype" say about this string?  If it says Lisp_String, what
> does "xstring" say?

(gdb) xtype
Lisp_Symbol
(gdb) xstring
$2 = (struct Lisp_String *) 0xb81a20
There is no member named data.

Not very useful.

(gdb) print *((struct Lisp_String *) 0xb81a20)
$9 = {
  intervals = 0x98,
  u = {
    imm = {
      gcmarkbit = 1,
      immbit = 0,
      size = -40,
      size_byte = -37,
      data = "\204\000\000\000\000\000\"\032\270\000\000\000\000\000\362\031\270\000\000\000\000"
    },
    dat = {
      unused = 1,
      size = <error reading variable>
  }
}

Even less useful.

I'll see if I can reproduce this in an unoptimized build...

-- 
NULL && (void)