zsh-workers
 help / color / mirror / code / Atom feed
From: Mikael Magnusson <mikachu@gmail.com>
To: zsh workers <zsh-workers@zsh.org>
Subject: Re: crash/memory corruption when completing dynamic named directory
Date: Sun, 27 Mar 2011 13:32:32 +0200	[thread overview]
Message-ID: <AANLkTinOF8x4XY8dtiPUkN=MaAcnyN59a_9yujM5KQAo@mail.gmail.com> (raw)
In-Reply-To: <alpine.LNX.2.01.1103261818320.22141@hp>

2011/3/26 Benjamin R. Haskell <zsh@benizi.com>:
> On Sat, 26 Mar 2011, Johan Sundström wrote:
>
>> On Sat, Mar 26, 2011 at 05:54, Mikael Magnusson wrote:
>>
>>> I can't reproduce this in zsh -f yet, all that happens is that the
>>> completion just fails quietly without doing anything.
>>> % echo ネネネネネ ~[<tab>
>>> results in
>>> % echo <e3><ad><e3><ad><e3><ad><e3><ad><e3><ad> ~[
>>>
>>> any idea what could be wrong or what I can try to narrow it down?
>>
>>
>> Not an answer per se, but maybe bits of data giving someone else a lead: ネ
>> is Unicode code point 12493, or "\u30CD", which normalizes to itself in all
>> four Unicode normalization forms NFC, NFD, NFKC and NFKD, and which UTF-8
>> encodes to 0xE3, 0x83, 0x8D. I have no ideas about what the pretty-printing
>> or <ad>:s could be related to.
>>
>
> The problem is that the string of 'ne's is being unmetafy'ed when it
> shouldn't be.  I don't know where.  But that's what's happening.
>
> Not sure if there's programmatic access to the metafy and unmetafy functions
> from within zsh.  I verified with the attached program.  To compile it,
> first compile zsh.  Then compile the test program via:
>
> $ gcc -o zsh-metafy zsh-metafy.c -lm -lcurses
> /path/to/zsh/compilation/*.o~*/main.o
> $ print -l ネネネネネ | ./zsh-metafy -u | myod
> 00000000 e3 ad e3 ad e3 ad e3 ad e3 ad 0a -- -- -- -- --  »..........¬«
>
> (myod is, as the name implies, just 'my' version of 'od')

Would you believe that accessing $CURSOR from within a completer will
actually unmetafy zlemetaline in place? :)

static zlong
get_cursor(UNUSED(Param pm))
{
    if (zlemetaline != NULL) {
	/* A lot of work for one number, but still... */
	ZLE_STRING_T tmpline;
	int tmpcs, tmpll, tmpsz;
	tmpline = stringaszleline(zlemetaline, zlemetacs,
				  &tmpll, &tmpsz, &tmpcs);
	free(tmpline);
	return tmpcs;
    }
    return zlecs;
}

calling stringaszleline with zlemetaline only occurs in one other
place: unmetafy_line :).

pws, afaict, only the first little bit of zlemetaline is needed for
this, ie the outcs calculation. Would it be okay to split this out to
a separate function and call that from get_cursor and stringaszleline?
Otherwise we have to copy zlemetaline first and then run
stringaszleline, and discard all that work, which seems silly. Or does
outcs actually depend on the conversion too? There's a comment that
suggests it doesn't, but there are some assignments to it further
down.

-- 
Mikael Magnusson


  reply	other threads:[~2011-03-27 11:32 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-26 12:54 Mikael Magnusson
2011-03-26 18:50 ` Johan Sundström
2011-03-26 22:26   ` Benjamin R. Haskell
2011-03-27 11:32     ` Mikael Magnusson [this message]
2011-03-27 11:37       ` Mikael Magnusson
2011-03-27 16:54         ` Peter Stephenson
2011-03-28  4:47       ` Bart Schaefer

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='AANLkTinOF8x4XY8dtiPUkN=MaAcnyN59a_9yujM5KQAo@mail.gmail.com' \
    --to=mikachu@gmail.com \
    --cc=zsh-workers@zsh.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.vuxu.org/mirror/zsh/

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 NNTP newsgroup(s).