zsh-workers
 help / color / mirror / code / Atom feed
* Re: globcomplete bug + bug when compctl.so not loaded + init patch
@ 1999-02-24 15:13 Sven Wischnowsky
  1999-02-25 11:14 ` Peter Stephenson
  0 siblings, 1 reply; 8+ messages in thread
From: Sven Wischnowsky @ 1999-02-24 15:13 UTC (permalink / raw)
  To: zsh-workers


Peter Stephenson wrote:

> Looks like things go haywire when globcomplete is set with new completion.
> 
> % _foo() { complist -k '(one two)'; }
> % defcomp _foo foo
> % setopt globcomplete
> % foo o*e<TAB>
> 
> The shell hangs and has to be got rid of with kill -9.  It looks like it's
> happening during the complist.  

The problem was that the second pointer into the match wasn't modified 
together with the main pointer. This caused a wrong value to be placed 
in one of those cline structs and later this led to an endless loop
(trying to make a negative and decremented value match a positive value).

Bye
 Sven

diff -u os/Zle/zle_tricky.c Src/Zle/zle_tricky.c
--- os/Zle/zle_tricky.c	Wed Feb 24 15:54:41 1999
+++ Src/Zle/zle_tricky.c	Wed Feb 24 16:07:43 1999
@@ -4311,6 +4311,7 @@
 		strcat(tt, s);
 		if (lpsuf)
 		    strcat(tt, lpsuf);
+		e += (tt - s);
 		untokenize(s = tt);
 		sl = strlen(s);
 	    }

--
Sven Wischnowsky                         wischnow@informatik.hu-berlin.de


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: globcomplete bug + bug when compctl.so not loaded + init patch
  1999-02-24 15:13 globcomplete bug + bug when compctl.so not loaded + init patch Sven Wischnowsky
@ 1999-02-25 11:14 ` Peter Stephenson
  0 siblings, 0 replies; 8+ messages in thread
From: Peter Stephenson @ 1999-02-25 11:14 UTC (permalink / raw)
  To: zsh-workers

Sven Wischnowsky wrote:
> > Looks like things go haywire when globcomplete is set with new completion.
> 
> The problem was that the second pointer into the match wasn't modified 
> together with the main pointer. This caused a wrong value to be placed 
> in one of those cline structs and later this led to an endless loop
> (trying to make a negative and decremented value match a positive value).

This doesn't seem to fix it for me; there's still something wrong in
addmatch() on the same test:

% setopt globcomplete
% setopt glob*e<TAB>

e is still not being set, so ee is wrong, so the second call to str_cline
after `if (ee != ss + sl || (lpsuf && *lspuf))' hangs.

Further up, the code is avoiding the whole file handling branch and
following the

  test = domatch(s, patcomp, 0)

branch of the next main condition around 4344, and is not following the

  if (!test && lpre && lpsuf) {

around 4359, so there's no opportunity for e to be set.

-- 
Peter Stephenson <pws@ibmth.df.unipi.it>       Tel: +39 050 844536
WWW:  http://www.ifh.de/~pws/
Dipartimento di Fisica, Via Buonarroti 2, 56127 Pisa, Italy


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: globcomplete bug + bug when compctl.so not loaded + init patch
@ 1999-02-25 12:11 Sven Wischnowsky
  0 siblings, 0 replies; 8+ messages in thread
From: Sven Wischnowsky @ 1999-02-25 12:11 UTC (permalink / raw)
  To: zsh-workers


Peter Stephenson wrote:

> This doesn't seem to fix it for me; there's still something wrong in
> addmatch() on the same test:
> 
> % setopt globcomplete
> % setopt glob*e<TAB>

Sorrysorrysorry, tested it only with files (ahem).

Bye
 Sven

--- os/Zle/zle_tricky.c	Wed Feb 24 16:09:57 1999
+++ Src/Zle/zle_tricky.c	Thu Feb 25 13:08:49 1999
@@ -4272,8 +4272,10 @@
 	    mpl = fpl; msl = fsl;
 	} else {
 	    if ((cp = filecomp)) {
-		if ((test = domatch(s, filecomp, 0)))
+		if ((test = domatch(s, filecomp, 0))) {
+		    e = s + sl;
 		    cc = 1;
+		}
 	    } else {
 		e = s + sl - fsl;
 		if ((test = !strncmp(s, fpre, fpl)))
@@ -4340,9 +4342,10 @@
 		  ((addwhat & CC_EXCMDS)  && !(hn->flags & DISABLED)))) ||
 		((addwhat & CC_BINDINGS) && !(hn->flags & DISABLED))))) {
 	if (sl >= rpl + rsl || mstack) {
-	    if (cp)
+	    if (cp) {
 		test = domatch(s, patcomp, 0);
-	    else {
+		e = s + sl;
+	    } else {
 		e = s + sl - rsl;
 		if ((test = !strncmp(s, rpre, rpl)))
 		    if ((test = !strcmp(e, rsuf))) {

--
Sven Wischnowsky                         wischnow@informatik.hu-berlin.de


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: globcomplete bug + bug when compctl.so not loaded + init patch
@ 1999-02-25  9:42 Sven Wischnowsky
  0 siblings, 0 replies; 8+ messages in thread
From: Sven Wischnowsky @ 1999-02-25  9:42 UTC (permalink / raw)
  To: zsh-workers


Peter Stephenson wrote:

> "Andrej Borsenkow" wrote:
> > I cannot apply it. I have pws-9 + 5469 patch. What else am I missing?
> 
> Those look like the relevant bits, but anyway here's what I think I've got
> applied so far.  Unfortunately all my mail disappeared (due to the zsh
> equivalent of an explosion in the laboratory whose cause may become
> apparent), so it's not easy to check back.  If Sven can't apply it either,
> it's probably my fault.

I could, and I think the relevant patch is 5491 (and probably 5489).

Bye
 Sven


--
Sven Wischnowsky                         wischnow@informatik.hu-berlin.de


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: globcomplete bug + bug when compctl.so not loaded + init patch
  1999-02-24 15:16 ` Andrej Borsenkow
@ 1999-02-24 15:18   ` Peter Stephenson
  0 siblings, 0 replies; 8+ messages in thread
From: Peter Stephenson @ 1999-02-24 15:18 UTC (permalink / raw)
  To: Peter Stephenson, Zsh hackers list

"Andrej Borsenkow" wrote:
> I cannot apply it. I have pws-9 + 5469 patch. What else am I missing?

Those look like the relevant bits, but anyway here's what I think I've got
applied so far.  Unfortunately all my mail disappeared (due to the zsh
equivalent of an explosion in the laboratory whose cause may become
apparent), so it's not easy to check back.  If Sven can't apply it either,
it's probably my fault.


Martin Buchholz: 5448: libc.h can't be included on Debian Linux, so only
include it on NeXT where it's necessary.

Matt: 5330: I've put this back the way it original was.  I hate sed almost
as much as awk.

Sven: 5455: keep track of which matcher specification to use

Sven: 5466: compwid manual for -after and -between

Sven: 5467: expn manual typo

Sven: 5469: init fix and Functions/Completion/_comp_parts

Sven: 5470: new completion conditions didn't handle untokenization
consistently.

Sven: 5471: range code knows not to handle associative arrays

Sven: 5476: quoting of tildes in Functions/Completion/_path_files

Sven: 5483: completeinword fixes

Sven: 5489: control for matching in _path_files and _comp_parts

Sven: 5490: unset test for AA elements when substituting

pws: unposted, see 5503: remove dynamic=no from configure.in when
underscore is needed.

pws: 5508: init and dump, globbing and printing.

-- 
Peter Stephenson <pws@ibmth.df.unipi.it>       Tel: +39 050 844536
WWW:  http://www.ifh.de/~pws/
Dipartimento di Fisica, Via Buonarroti 2, 56127 Pisa, Italy


^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: globcomplete bug + bug when compctl.so not loaded + init patch
  1999-02-24 13:47 Peter Stephenson
@ 1999-02-24 15:16 ` Andrej Borsenkow
  1999-02-24 15:18   ` Peter Stephenson
  0 siblings, 1 reply; 8+ messages in thread
From: Andrej Borsenkow @ 1999-02-24 15:16 UTC (permalink / raw)
  To: Peter Stephenson, Zsh hackers list

  First I had to apply the patch at the
> end to get the _* files to match properly; plus I needed to fix up some
> nullglob flags in init and dump else dump miscounted the number
> of files; I
> also made dump produce an alphabetic order (I never realised `whence' just
> dumped the table out without ordering, but maybe I should have).
>


I cannot apply it. I have pws-9 + 5469 patch. What else am I missing?

/andrej


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: globcomplete bug + bug when compctl.so not loaded + init patch
@ 1999-02-24 14:53 Sven Wischnowsky
  0 siblings, 0 replies; 8+ messages in thread
From: Sven Wischnowsky @ 1999-02-24 14:53 UTC (permalink / raw)
  To: zsh-workers


Peter Stephenson wrote:

> I tried to reproduce this with zsh -f (and succeeded eventually), but got
> another bug --- well two, actually.  First I had to apply the patch at the
> end to get the _* files to match properly; plus I needed to fix up some
> nullglob flags in init and dump else dump miscounted the number of files; I
> also made dump produce an alphabetic order (I never realised `whence' just
> dumped the table out without ordering, but maybe I should have).
> 
> Then the following happened.
> 
> % fpath=(~/bin/comp)
> % . ~/bin/comp/init
> % setopt glob<TAB>
> zsh: 19372 illegal hardware instruction (core dumped)  ./zsh -f

I guess it's the same Andrej just reported. The patch below takes some 
code from `bin_zmodload_load' and puts it into a new function
`require_module'. Then `bin_zle_complete' calls this function to try
to make `compctl' loaded. In an environment without dynamically loaded 
modules it just tests if `makecompparamsptr' is NULL.

Bye
 Sven

diff -u os/module.c Src/module.c
--- os/module.c	Wed Feb 24 13:59:11 1999
+++ Src/module.c	Wed Feb 24 15:47:06 1999
@@ -567,6 +567,37 @@
     return m;
 }
 
+/* This ensures that the module with the name given as the second argument
+ * is loaded.
+ * The third argument should be non-zero if the function should complain
+ * about trying to load a module with a full path name in restricted mode.
+ * The last argument should be non-zero if this function should signal an
+ * error if the module is already loaded.
+ * The return value is the module of NULL if the module couldn't be loaded. */
+
+/**/
+Module
+require_module(char *nam, char *module, int res, int test)
+{
+    Module m = NULL;
+    LinkNode node;
+
+    node = find_module(module);
+    if (node && (m = ((Module) getdata(node)))->handle &&
+	!(m->flags & MOD_UNLOAD)) {
+	if (test) {
+	    zwarnnam(nam, "module %s already loaded.", module, 0);
+	    return NULL;
+	}
+    } else if (res && isset(RESTRICTED) && strchr(module, '/')) {
+	zwarnnam(nam, "%s: restricted", module, 0);
+	return NULL;
+    } else
+	return load_module(module);
+
+    return m;
+}
+
 /**/
 void
 add_dep(char *name, char *from)
@@ -963,22 +994,10 @@
 	return 0;
     } else {
 	/* load modules */
-	for (; *args; args++) {
-	    Module m;
-
-	    node = find_module(*args);
-	    if (node && (m = ((Module) getdata(node)))->handle &&
-		!(m->flags & MOD_UNLOAD)) {
-		if (!ops['i']) {
-		    zwarnnam(nam, "module %s already loaded.", *args, 0);
-		    ret = 1;
-		}
-	    } else if (isset(RESTRICTED) && strchr(*args, '/')) {
-		zwarnnam(nam, "%s: restricted", *args, 0);
-		ret = 1;
-	    } else if (!load_module(*args))
+	for (; *args; args++)
+	    if (!require_module(nam, *args, 1, (!ops['i'])))
 		ret = 1;
-	}
+
 	return ret;
     }
 }
diff -u os/Zle/comp1.c Src/Zle/comp1.c
--- os/Zle/comp1.c	Tue Feb 23 11:34:27 1999
+++ Src/Zle/comp1.c	Wed Feb 24 15:52:40 1999
@@ -410,6 +410,7 @@
     cc_first.mask2 = CC_CCCONT;
     compcontext = compcommand = compprefix = compsuffix =
 	compiprefix = NULL;
+    makecompparamsptr = NULL;
     return 0;
 }
 
diff -u os/Zle/zle_thingy.c Src/Zle/zle_thingy.c
--- os/Zle/zle_thingy.c	Tue Feb 23 11:34:29 1999
+++ Src/Zle/zle_thingy.c	Wed Feb 24 15:46:17 1999
@@ -478,6 +478,17 @@
     Thingy t;
     Widget w, cw;
 
+#ifdef DYNAMIC
+    if (!require_module(name, "compctl", 0, 0)) {
+	zerrnam(name, "can't load compctl module", NULL, 0);
+	return 1;
+    }
+#else
+    if (!makecompparamsptr) {
+	zerrnam(name, "compctl module not available", NULL, 0);
+	return 1;
+    }
+#endif
     t = rthingy(args[1]);
     cw = t->widget;
     unrefthingy(t);

--
Sven Wischnowsky                         wischnow@informatik.hu-berlin.de


^ permalink raw reply	[flat|nested] 8+ messages in thread

* globcomplete bug + bug when compctl.so not loaded + init patch
@ 1999-02-24 13:47 Peter Stephenson
  1999-02-24 15:16 ` Andrej Borsenkow
  0 siblings, 1 reply; 8+ messages in thread
From: Peter Stephenson @ 1999-02-24 13:47 UTC (permalink / raw)
  To: Zsh hackers list

Looks like things go haywire when globcomplete is set with new completion.

% _foo() { complist -k '(one two)'; }
% defcomp _foo foo
% setopt globcomplete
% foo o*e<TAB>

The shell hangs and has to be got rid of with kill -9.  It looks like it's
happening during the complist.  


I tried to reproduce this with zsh -f (and succeeded eventually), but got
another bug --- well two, actually.  First I had to apply the patch at the
end to get the _* files to match properly; plus I needed to fix up some
nullglob flags in init and dump else dump miscounted the number of files; I
also made dump produce an alphabetic order (I never realised `whence' just
dumped the table out without ordering, but maybe I should have).

Then the following happened.

% fpath=(~/bin/comp)
% . ~/bin/comp/init
% setopt glob<TAB>
zsh: 19372 illegal hardware instruction (core dumped)  ./zsh -f

It looks like this is because compctl.so has never been loaded, so that
makecompparamsptr never got defined.  Probably this ought to be checked for
somewhere.

--- Functions/Completion/dump.bk	Fri Feb 19 14:38:12 1999
+++ Functions/Completion/dump	Wed Feb 24 14:39:26 1999
@@ -16,7 +16,7 @@
 
 _d_file=${COMPDUMP-${0:h}/init.dump}
 
-_d_files=( ${^~fpath}/_*~*~ )
+_d_files=( ${^~fpath}/_*~*~(N) )
 
 print "#files: $#_d_files" > $_d_file
 
@@ -26,7 +26,7 @@
 # ensure that a single quote inside a variable is itself correctly quoted.
 
 print "comps=(" >> $_d_file
-for _d_f in ${(k)comps}; do
+for _d_f in ${(ok)comps}; do
     print -r - "'${_d_f//\'/'\\''}'" "'${comps[$_d_f]//\'/'\\''}'"
 done  >> $_d_file
 print ")" >> $_d_file
@@ -66,16 +66,16 @@
 # Autoloads: whence -w produces "_d_foo: function", so look for
 # all functions beginning with `_'.
 
-_d_als=($(whence -wm '_*' |
+_d_als=($(whence -wm '_*' | sort |
 while read -rA _d_line; do
   [[ ${_d_line[2]} = function ]] && print -r - ${_d_line[1]%:}
 done))
 
-# print them out:  about six to a line looks neat
+# print them out:  about five to a line looks neat
 
 while (( $#_d_als )); do
   print -n autoload
-  for (( _i = 0; _i < 6; _i++ )); do
+  for (( _i = 0; _i < 5; _i++ )); do
     if (( $#_d_als )); then
       print -n " $_d_als[1]"
       shift _d_als
--- Functions/Completion/init.bk	Tue Feb 23 14:56:17 1999
+++ Functions/Completion/init	Wed Feb 24 14:39:26 1999
@@ -170,7 +170,12 @@
 
 : ${COMPDUMP:=$0.dump}
 
-_i_files=( ${^~fpath}/_*~*~ )
+if [[ ! -o extendedglob ]]; then
+  _i_noextglob=yes
+  setopt extendedglob
+fi
+
+_i_files=( ${^~fpath}/_*~*~(N) )
 _i_initname=$0
 _i_done=''
 
@@ -185,10 +190,6 @@
   unset _i_line
 fi
 if [[ -z "$_i_done" ]]; then
-  if [[ ! -o extendedglob ]]; then
-    _i_noextglob=yes
-    setopt extendedglob
-  fi
   for _i_dir in $fpath; do
     [[ $_i_dir = . ]] && continue
     for _i_file in $_i_dir/_*~*~(N); do
@@ -222,13 +223,13 @@
       fi
     done
 
-  [[ -z "$_i_noextglob" ]] || unsetopt extendedglob
-
-  unset _i_dir _i_line _i_file _i_tag _i_noextglob
+  unset _i_dir _i_line _i_file _i_tag
 
   # If autodumping was requested, do it now.
 
   (( _i_autodump )) && builtin . ${_i_initname:h}/dump
 fi
 
-unset _i_files _i_initname _i_done _i_autodump
+[[ -z "$_i_noextglob" ]] || unsetopt extendedglob
+
+unset _i_files _i_initname _i_done _i_autodump _i_noextglob

-- 
Peter Stephenson <pws@ibmth.df.unipi.it>       Tel: +39 050 844536
WWW:  http://www.ifh.de/~pws/
Dipartimento di Fisica, Via Buonarroti 2, 56127 Pisa, Italy


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~1999-02-25 12:13 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-02-24 15:13 globcomplete bug + bug when compctl.so not loaded + init patch Sven Wischnowsky
1999-02-25 11:14 ` Peter Stephenson
  -- strict thread matches above, loose matches on Subject: below --
1999-02-25 12:11 Sven Wischnowsky
1999-02-25  9:42 Sven Wischnowsky
1999-02-24 14:53 Sven Wischnowsky
1999-02-24 13:47 Peter Stephenson
1999-02-24 15:16 ` Andrej Borsenkow
1999-02-24 15:18   ` Peter Stephenson

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).