from Version_2_6_10-289-ge43acd4 to Version_2_6_11pre
a: Version_2_6_10-289-ge43acd4
b: Version_2_6_11pre

Help
Common Key Bindings:
p:previous block  n:next block  G:redisplay  q:quit
Extra Bindings for Diff blocks:
RET:visit file/line
diff --git gcl-2.6.10.orig/configure gcl-2.6.10/configure
index 8b6e342..66bd4ee 100755
--- gcl-2.6.10.orig/configure
+++ gcl-2.6.10/configure
@@ -4282,7 +4282,11 @@ done
 
 
 # Work around system/gprof mips/hppa hang
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking working gprof" >&5
+$as_echo_n "checking working gprof... " >&6; }
+old_enable_gprof=enable_gprof
 case $use in
+  powerpc*) if test "$host_cpu" = "powerpc64le" ; then enable_gprof="no"; fi;;
   sh4*)  enable_gprof="no";;
   ia64*)  enable_gprof="no";;
 #  mips*) enable_gprof="no";;
@@ -4290,6 +4294,13 @@ case $use in
   arm*)  enable_gprof="no";;#FIXME mcount compiled as a 24/22 bit reloc even with -mlong-calls, marginally accessible
   *gnu)  enable_gprof="no";;
 esac
+if test "$enable_gprof" = "$old_enable_gprof" ; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5
+$as_echo "disabled" >&6; }
+fi
 
 if test "$enable_gprof" = "yes" ; then
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for text start" >&5
@@ -7791,6 +7802,58 @@ else
 fi
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for buggy maximum sscanf length" >&5
+$as_echo_n "checking for buggy maximum sscanf length... " >&6; }
+if test "$cross_compiling" = yes; then :
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+            #include <stdio.h>
+
+int
+main ()
+{
+
+            char *s= "2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274274663919320030599218174135966290435729003342952605956307381323286279434907632338298807531952510190115738341879307021540891499348841675092447614606680822648001684774118537423454424371075390777449920695517027618386062613313845830007520449338265602976067371132007093287091274437470472306969772093101416928368190255151086574637721112523897844250569536967707854499699679468644549059879316368892300987931277361782154249992295763514822082698951936680331825288693984964651058209392398294887933203625094431173012381970684161404";
+	    int n, m;
+	    double f;
+	    char *endptr;
+            FILE *fp=fopen("conftest1","w");
+
+	    n=sscanf(s,"%lf%n",&f,&m);
+	    fprintf(fp,"%d",m);
+	    fclose(fp);
+	    return s[m];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+else
+  buggy_maximum_sscanf_length=`cat conftest1`
+         { $as_echo "$as_me:${as_lineno-$LINENO}: result: $buggy_maximum_sscanf_length" >&5
+$as_echo "$buggy_maximum_sscanf_length" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define BUGGY_MAXIMUM_SSCANF_LENGTH $buggy_maximum_sscanf_length
+_ACEOF
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+
 EXTRA_LOBJS=
 if test "$try_japi" = "yes" ; then
    for ac_header in japi.h
diff --git gcl-2.6.10.orig/configure.in gcl-2.6.10/configure.in
index 3ae4b04..502a623 100644
--- gcl-2.6.10.orig/configure.in
+++ gcl-2.6.10/configure.in
@@ -533,7 +533,10 @@ esac
 AC_CHECK_PROGS(AWK,[gawk nawk awk])
 
 # Work around system/gprof mips/hppa hang
+AC_MSG_CHECKING([working gprof])
+old_enable_gprof=enable_gprof
 case $use in
+  powerpc*) if test "$host_cpu" = "powerpc64le" ; then enable_gprof="no"; fi;;
   sh4*)  enable_gprof="no";;
   ia64*)  enable_gprof="no";;
 #  mips*) enable_gprof="no";;
@@ -541,6 +544,11 @@ case $use in
   arm*)  enable_gprof="no";;#FIXME mcount compiled as a 24/22 bit reloc even with -mlong-calls, marginally accessible
   *gnu)  enable_gprof="no";;
 esac		     
+if test "$enable_gprof" = "$old_enable_gprof" ; then
+   AC_MSG_RESULT([ok])
+else
+   AC_MSG_RESULT([disabled])
+fi
 
 if test "$enable_gprof" = "yes" ; then
 	AC_MSG_CHECKING(for text start)
@@ -2163,6 +2171,28 @@ AC_EGREP_HEADER([gettimeofday],
 AC_CHECK_LIB(m,sin,LIBS="${LIBS} -lm",true)
 AC_CHECK_LIB(mingwex,main,LIBS="${LIBS} -lmingwex",true)
 
+AC_MSG_CHECKING([for buggy maximum sscanf length])
+AC_RUN_IFELSE([
+	AC_LANG_PROGRAM([[
+            #include <stdio.h>
+          ]],[[
+            char *s= "2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274274663919320030599218174135966290435729003342952605956307381323286279434907632338298807531952510190115738341879307021540891499348841675092447614606680822648001684774118537423454424371075390777449920695517027618386062613313845830007520449338265602976067371132007093287091274437470472306969772093101416928368190255151086574637721112523897844250569536967707854499699679468644549059879316368892300987931277361782154249992295763514822082698951936680331825288693984964651058209392398294887933203625094431173012381970684161404";
+	    int n, m;
+	    double f;
+	    char *endptr;
+            FILE *fp=fopen("conftest1","w");
+
+	    n=sscanf(s,"%lf%n",&f,&m);
+	    fprintf(fp,"%d",m);
+	    fclose(fp);
+	    return s[m];
+	  ]])],
+	[AC_MSG_RESULT([none])],
+	[buggy_maximum_sscanf_length=`cat conftest1`
+         AC_MSG_RESULT([$buggy_maximum_sscanf_length])
+	 AC_DEFINE_UNQUOTED(BUGGY_MAXIMUM_SSCANF_LENGTH,$buggy_maximum_sscanf_length,[sscanf terminates prematurely (Windows XP)])])
+
+
 EXTRA_LOBJS=
 if test "$try_japi" = "yes" ; then
    AC_CHECK_HEADERS(japi.h,[AC_DEFINE(HAVE_JAPI_H)
diff --git gcl-2.6.10.orig/h/gclincl.h.in gcl-2.6.10/h/gclincl.h.in
index 1a77daf..cfc0bd6 100644
--- gcl-2.6.10.orig/h/gclincl.h.in
+++ gcl-2.6.10/h/gclincl.h.in
@@ -15,6 +15,9 @@
 /* binding stack size */
 #undef BDSSIZE
 
+/* sscanf terminates prematurely (Windows XP) */
+#undef BUGGY_MAXIMUM_SSCANF_LENGTH
+
 /* can prevent sbrk from returning random values */
 #undef CAN_UNRANDOMIZE_SBRK
 
diff --git gcl-2.6.10.orig/o/cmpaux.c gcl-2.6.10/o/cmpaux.c
index fe533ce..d2d75ed 100755
--- gcl-2.6.10.orig/o/cmpaux.c
+++ gcl-2.6.10/o/cmpaux.c
@@ -556,7 +556,9 @@ find_init_name1(char *s,unsigned len) {
   if (fread(tmp,1,ss.st_size,f)!=ss.st_size)
     FEerror("Error reading binary file",0);
   fclose(f);
-  for (s=tmp+1;s<tmp+ss.st_size && (strncmp(s,"init_",5) || s[-1]);q=strstr(s+1,"init_"),s=q ? q : s+strlen(s)+1);
+  for (s=tmp+1;s<tmp+ss.st_size
+	 && (strncmp(s,"init_",5) || (s>tmp && (s[-1]=='_' ? (s>tmp+1 && s[-2]) : s[-1])));
+       q=strstr(s+1,"init_"),s=q ? q : s+strlen(s)+1);
   if (strncmp(s,"init_",5))
     FEerror("Init name not found",0);
   return make_simple_string(s);
diff --git gcl-2.6.10.orig/o/read.d gcl-2.6.10/o/read.d
index 6490cf5..be079d8 100755
--- gcl-2.6.10.orig/o/read.d
+++ gcl-2.6.10/o/read.d
@@ -142,6 +142,14 @@ parse_number(char *s,int radix) {
       	return OBJNULL;
       *q='E';
     }
+#ifdef BUGGY_MAXIMUM_SSCANF_LENGTH
+    if (strlen(s)>BUGGY_MAXIMUM_SSCANF_LENGTH) {
+      char *q1=s+BUGGY_MAXIMUM_SSCANF_LENGTH-strlen(q);
+      fprintf(stderr,"Chopping\n");fflush(stderr);
+      memmove(q1,q,strlen(q)+1);
+      q=q1;
+    }
+#endif
     n=sscanf(s,"%lf%n",&f,&m);
     *q=c;
     if (n!=1||s[m]) return OBJNULL;
diff --git gcl-2.6.10.orig/o/sfaslmacho.c gcl-2.6.10/o/sfaslmacho.c
index cf11268..1c190ea 100644
--- gcl-2.6.10.orig/o/sfaslmacho.c
+++ gcl-2.6.10/o/sfaslmacho.c
@@ -508,6 +508,18 @@ label_got_symbols(void *v1,struct section *sec,struct nlist *n1,struct nlist *ne
   
 }
 
+static int
+clear_protect_memory(object memory) {
+
+  void *p,*pe;
+
+  p=(void *)((unsigned long)memory->cfd.cfd_start & ~(PAGESIZE-1));
+  pe=(void *)((unsigned long)(memory->cfd.cfd_start+memory->cfd.cfd_size + PAGESIZE-1) & ~(PAGESIZE-1));
+
+  return gcl_mprotect(p,pe-p,PROT_READ|PROT_WRITE|PROT_EXEC);
+
+}
+
 
 int
 fasload(object faslfile) {
@@ -546,6 +558,8 @@ fasload(object faslfile) {
   fseek(fp,(void *)ste-v1,SEEK_SET);
   data = feof(fp) ? 0 : read_fasl_vector(faslfile);
   
+  massert(!clear_protect_memory(memory));
+
 #ifdef CLEAR_CACHE
   CLEAR_CACHE;
 #endif
