about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2009-05-29 21:06:40 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2009-05-29 21:06:40 +0000
commit71865fd36d5b352602cb4b7555dfd912b5819c64 (patch)
tree772ab01549d5c2da28243bf1a3600666d0565c33
parent4e5ac964e6b557733db89de33c5814e484350796 (diff)
downloadzsh-71865fd36d5b352602cb4b7555dfd912b5819c64.tar.gz
zsh-71865fd36d5b352602cb4b7555dfd912b5819c64.tar.xz
zsh-71865fd36d5b352602cb4b7555dfd912b5819c64.zip
27021: fix length of saved glob flags in pattern matching
-rw-r--r--ChangeLog8
-rw-r--r--Src/pattern.c11
2 files changed, 13 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index d8e6b87f6..d87399d9f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-05-29  Peter Stephenson  <p.w.stephenson@ntlworld.com>
+
+	* 27021: Src/pattern.c: length of variable saving globflags
+	was wrong causing restored value to be wrong in pattern matching
+	on big-endian 64-bit systems.
+
 2009-05-28  Peter Stephenson  <pws@csr.com>
 
 	* Jun T.: 27010: Completion/Unix/Command/_date: Darwin.
@@ -11780,5 +11786,5 @@
 
 *****************************************************
 * This is used by the shell to define $ZSH_PATCHLEVEL
-* $Revision: 1.4701 $
+* $Revision: 1.4702 $
 *****************************************************
diff --git a/Src/pattern.c b/Src/pattern.c
index d4941253c..8ac79546d 100644
--- a/Src/pattern.c
+++ b/Src/pattern.c
@@ -668,7 +668,8 @@ patcompswitch(int paren, int *flagp)
 {
     long starter, br, ender, excsync = 0;
     int parno = 0;
-    int flags, gfchanged = 0, savglobflags = patglobflags;
+    int flags, gfchanged = 0;
+    long savglobflags = (long)patglobflags;
     Upat ptr;
 
     *flagp = 0;
@@ -688,7 +689,7 @@ patcompswitch(int paren, int *flagp)
     br = patnode(P_BRANCH);
     if (!patcompbranch(&flags))
 	return 0;
-    if (patglobflags != savglobflags)
+    if (patglobflags != (int)savglobflags)
 	gfchanged++;
     if (starter)
 	pattail(starter, br);
@@ -777,7 +778,7 @@ patcompswitch(int paren, int *flagp)
 		    patadd((char *)&up, 0, sizeof(union upat), 0);
 		}
 	    } else {
-		patglobflags = savglobflags;
+		patglobflags = (int)savglobflags;
 	    }
 	}
 	newbr = patcompbranch(&flags);
@@ -792,7 +793,7 @@ patcompswitch(int paren, int *flagp)
 	    return 0;
 	if (gfnode)
 	    pattail(gfnode, newbr);
-	if (!tilde && patglobflags != savglobflags)
+	if (!tilde && patglobflags != (int)savglobflags)
 	    gfchanged++;
 	pattail(starter, br);
 	if (excsync)
@@ -831,7 +832,7 @@ patcompswitch(int paren, int *flagp)
 	 * a later branch happened to put the flags back.
 	 */
 	pattail(ender, patnode(P_GFLAGS));
-	patglobflags = savglobflags;
+	patglobflags = (int)savglobflags;
 	patadd((char *)&savglobflags, 0, sizeof(long), 0);
     }