From 723b28e19e730918e91f7d3246de13a6b609bd9c Mon Sep 17 00:00:00 2001
From: "Mirar (Pontus Hagland)" <pike@sort.mirar.org>
Date: Thu, 19 Feb 1998 00:34:11 +0100
Subject: [PATCH] bugfix in diff3

Rev: lib/modules/Array.pmod:1.13
---
 lib/modules/Array.pmod | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/lib/modules/Array.pmod b/lib/modules/Array.pmod
index b96bd314f6..0b6d2c81a9 100644
--- a/lib/modules/Array.pmod
+++ b/lib/modules/Array.pmod
@@ -197,22 +197,24 @@ array(array(array(mixed))) diff3(array mid,array left,array right)
    [lmid,ldst]=diff(mid,left);
    [rmid,rdst]=diff(mid,right);
 
+   werror(sprintf("%O\n",({rmid,rdst})));
+
    array res=({});
    int lpos=0,rpos=0;
    int l=0,r=0,n;
    array eq=({});
    int x;
 
-   for (n=0; n<sizeof(mid);)
+   for (n=0; ;)
    {
-      while (lpos>=sizeof(lmid[l]))
+      while (l<sizeof(lmid) && lpos>=sizeof(lmid[l]))
       {
 	 if (sizeof(ldst[l])>lpos)
 	    res+=({({({}),ldst[l][lpos..],({})})});
 	 l++;
 	 lpos=0;
       }
-      while (rpos>=sizeof(rmid[r])) 
+      while (r<sizeof(rmid) && rpos>=sizeof(rmid[r])) 
       {
 	 if (sizeof(rdst[r])>rpos)
 	    res+=({({({}),({}),rdst[r][rpos..]})});
@@ -220,6 +222,8 @@ array(array(array(mixed))) diff3(array mid,array left,array right)
 	 rpos=0;
       }
 
+      if (n==sizeof(mid)) break;
+
       x=min(sizeof(lmid[l])-lpos,sizeof(rmid[r])-rpos);
 
       if (lmid[l]==ldst[l] && rmid[r]==rdst[r])
@@ -244,8 +248,8 @@ array(array(array(mixed))) diff3(array mid,array left,array right)
 		  rdst[r][rpos..rpos+x-1]})});
       }
 
-//       werror(sprintf("-> %-5{%O%} %-5{%O%} %-5{%O%}"
-// 		     " x=%d l=%d:%d r=%d:%d \n",@res[-1],x,l,lpos,r,rpos));
+//        werror(sprintf("-> %-5{%O%} %-5{%O%} %-5{%O%}"
+//  		     " x=%d l=%d:%d r=%d:%d \n",@res[-1],x,l,lpos,r,rpos));
 	 
       rpos+=x;
       lpos+=x;
-- 
GitLab