zsh-workers
 help / color / mirror / code / Atom feed
From: Zoltan Hidvegi <hzoli@cs.elte.hu>
To: Louis.Granboulan@ens.fr (Louis Granboulan)
Cc: zsh-workers@math.gatech.edu, wfp5p@tigger.itc.virginia.edu
Subject: Re: zsh-mem & prompt
Date: Fri, 2 Aug 1996 20:26:57 +0200 (MET DST)	[thread overview]
Message-ID: <199608021826.UAA05943@bolyai.cs.elte.hu> (raw)
In-Reply-To: <199608021458.QAA16392@agaric.ens.fr> from Louis Granboulan at "Aug 2, 96 04:58:44 pm"

> This is zsh-3.0-pre5 on a SPARCstation-5 with SunOS 4.1.4
> When it is configured with --enable-zsh-mem, I have the following
> message : attempt to free more than allocated
> The problem is that the prompt buffer `lpptbuf' does not terminate with '\0'.

That's not really a problem.  The problem is that zsfree used.  The patch
below fixes that.  It allso changes mem.c to fill the freed memory with
0xff insted of zero.  Dereferencing ~0 should also cause SEGV and after
this patch newly allocated string buffers will not be automatically null
terminated so it may bring up some bugs (of course only if zsh is
configured using ./configure --enable-zsh-{mem,{mem-,}debug,secure-free}).
I did not see this prompt bug exacly because of this automatic zero-fill.

Btw. it may fix those mysterious core dumps reported by Bill.  Bill, would
you try it?

Zoltan


*** Src/zle_refresh.c	1996/07/31 15:45:25	2.11
--- Src/zle_refresh.c	1996/08/02 15:47:04
***************
*** 996,1003 ****
  void
  genprompts(void)
  {
!     zsfree(lpptbuf);
!     zsfree(rpptbuf);
      lpptbuf = putprompt(lpmpt, &lpptlen, &pptw, 1);
      pmpt_attr = txtchange;
      rpptbuf = putprompt(rpmpt, &rpptlen, &rpw, 1);
--- 996,1003 ----
  void
  genprompts(void)
  {
!     zfree(lpptbuf, lpptlen);
!     zfree(rpptbuf, rpptlen);
      lpptbuf = putprompt(lpmpt, &lpptlen, &pptw, 1);
      pmpt_attr = txtchange;
      rpptbuf = putprompt(rpmpt, &rpptlen, &rpw, 1);
*** Src/mem.c	1996/07/29 23:44:19	2.8
--- Src/mem.c	1996/08/02 15:40:37
***************
*** 831,837 ****
  
  #ifdef ZSH_MEM_DEBUG
  		m_f[M_BSLEN(mt->len) / M_ISIZE]++;
! 		memset(sh, 0, M_BSLEN(mt->len));
  #endif
  
  		/* put the block onto the free list */
--- 831,837 ----
  
  #ifdef ZSH_MEM_DEBUG
  		m_f[M_BSLEN(mt->len) / M_ISIZE]++;
! 		memset(sh, 0xff, M_BSLEN(mt->len));
  #endif
  
  		/* put the block onto the free list */
***************
*** 904,910 ****
      }
      DPUTS(m->len < osz, "attempt to free more than allocated.");
  #ifdef ZSH_MEM_DEBUG
!     memset(p, 0, m->len);
  #endif
      if (mt && ((char *)mt) == (((char *)m) + M_ISIZE + m->len)) {
  	/* the block after the one we are freeing is free, we put them
--- 904,910 ----
      }
      DPUTS(m->len < osz, "attempt to free more than allocated.");
  #ifdef ZSH_MEM_DEBUG
!     memset(p, 0xff, m->len);
  #endif
      if (mt && ((char *)mt) == (((char *)m) + M_ISIZE + m->len)) {
  	/* the block after the one we are freeing is free, we put them


  reply	other threads:[~1996-08-02 18:39 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1996-08-02 14:58 Louis Granboulan
1996-08-02 18:26 ` Zoltan Hidvegi [this message]
1996-08-02 18:51   ` Bill Pemberton

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=199608021826.UAA05943@bolyai.cs.elte.hu \
    --to=hzoli@cs.elte.hu \
    --cc=Louis.Granboulan@ens.fr \
    --cc=wfp5p@tigger.itc.virginia.edu \
    --cc=zsh-workers@math.gatech.edu \
    /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).