diff interps/malbolge/malbolge.patch @ 996:859f9b4339e6

<Gregor> tar xf egobot.tar.xz
author HackBot
date Sun, 09 Dec 2012 19:30:08 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/interps/malbolge/malbolge.patch	Sun Dec 09 19:30:08 2012 +0000
@@ -0,0 +1,51 @@
+--- malbolge.c	2005-04-21 00:30:33.000000000 +0200
++++ malbolge-new.c	2005-06-03 21:51:11.775304752 +0200
+@@ -73,15 +73,13 @@
+   while ( ( x = getc( f ) ) != EOF )
+   {
+     if ( isspace( x ) ) continue;
+-    if ( x < 127 && x > 32 )
++    if ( x < 33 || x > 126
++        || strchr( "ji*p</vo", xlat1[( x - 33 + i ) % 94] ) == NULL )
+     {
+-      if ( strchr( "ji*p</vo", xlat1[( x - 33 + i ) % 94] ) == NULL )
+-      {
+-        fputs( "invalid character in source file\n", stderr );
+-        free( mem );
+-        fclose( f );
+-        return ( 1 );
+-      }
++      fputs( "invalid character in source file\n", stderr );
++      free( mem );
++      fclose( f );
++      return ( 1 );
+     }
+     if ( i == 59049 )
+     {
+@@ -93,6 +91,8 @@
+     mem[i++] = x;
+   }
+   fclose( f );
++  if ( i < 1 ) mem[i++] = 68;
++  if ( i < 2 ) mem[i++] = 67;
+   while ( i < 59049 ) mem[i] = op( mem[i - 1], mem[i - 2] ), i++;
+   exec( mem );
+   free( mem );
+@@ -108,7 +108,7 @@
+   int x;
+   for (;;)
+   {
+-    if ( mem[c] < 33 || mem[c] > 126 ) continue;
++    if ( mem[c] < 33 || mem[c] > 126 ) return;
+     switch ( xlat1[( mem[c] - 33 + c ) % 94] )
+     {
+       case 'j': d = mem[d]; break;
+@@ -130,7 +130,7 @@
+         break;
+       case 'v': return;
+     }
+-    mem[c] = xlat2[mem[c] - 33];
++    if ( mem[c] >= 33 && mem[c] <= 126 ) mem[c] = xlat2[mem[c] - 33];
+     if ( c == 59048 ) c = 0; else c++;
+     if ( d == 59048 ) d = 0; else d++;
+   }