From f5d7aa90c4dd87808df9d7327fc2b5e724880547 Mon Sep 17 00:00:00 2001 From: id101010 Date: Thu, 10 Nov 2016 02:08:40 +0100 Subject: [PATCH] Prevented memory under and overun --- bfckr.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/bfckr.c b/bfckr.c index ca611e6..784afba 100644 --- a/bfckr.c +++ b/bfckr.c @@ -15,11 +15,12 @@ // Amount of memory on the band tape #define MEMORY_SIZE 10000 -#define MAX_INPUT_SIZE 1000 +#define MAX_INPUT_SIZE 10000 // Memory initialized with zeros and its pointer char memory[MEMORY_SIZE] = {0}; char *p = memory; +int memcnt = 0; // Prototypes void bfuck_parser(char *input); @@ -44,11 +45,23 @@ void bfuck_parser(char *input) for(size_t i = 0; input[i] != 0; i++) { // where i is the instruction pointer switch(input[i]) { case '>': - ++p; // increment data pointer + if(memcnt >= MEMORY_SIZE) { // prevent overrun + p = &memory[0]; + memcnt = 0; + } else { + ++p; // increment data pointer + ++memcnt; + } break; case '<': - --p; // decrement data pointer + if(memcnt < 0) { // prevent underun + p = &memory[MEMORY_SIZE - 1]; + memcnt = MEMORY_SIZE - 1; + } else { + --p; // decrement data pointer + --memcnt; + } break; case '+':