view interps/malbolge/malbolge.patch @ 5674:91d4a5b788c9

<tswett> echo \'[11,11,11,15,15,23,12],[5,5,5,3,53,45,16,26,00,20,15,16,22,25,45,91,32,11,15,27,06,01,11,01,47,22,30,13,43,21,11,13,29,61,65,17,19,12,28,17,11,01,23,20,16,20,81,18,32,25,58,22.,1985,10.301350435,1555466973690094680980000956080767,13720946704494913791885940266665466978579582015128512190078...\' > wisdom/code
author HackBot
date Wed, 24 Jun 2015 14:47:46 +0000
parents 859f9b4339e6
children
line wrap: on
line source

--- 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++;
   }