Skip to content

Commit

Permalink
Merge pull request #110 from Brainrotlang/fix/mem-issues
Browse files Browse the repository at this point in the history
memory checks
  • Loading branch information
SIGMazer authored Jan 26, 2025
2 parents 9a0bbca + 2e9385a commit cc799c3
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 11 deletions.
14 changes: 7 additions & 7 deletions ast.c
Original file line number Diff line number Diff line change
Expand Up @@ -101,27 +101,27 @@ bool set_array_variable(char *name, int length, TypeModifiers mods, VarType type
{
case VAR_INT:
var->value.iarray = SAFE_MALLOC_ARRAY(int, length);
memset(var->value.iarray, 0, length * sizeof(int));
if(length) memset(var->value.iarray, 0, length * sizeof(int));
break;
case VAR_SHORT:
var->value.sarray = SAFE_MALLOC_ARRAY(short, length);
memset(var->value.sarray, 0, length * sizeof(short));
if(length) memset(var->value.sarray, 0, length * sizeof(short));
break;
case VAR_FLOAT:
var->value.farray = SAFE_MALLOC_ARRAY(float, length);
memset(var->value.farray, 0, length * sizeof(float));
if(length) memset(var->value.farray, 0, length * sizeof(float));
break;
case VAR_DOUBLE:
var->value.darray = SAFE_MALLOC_ARRAY(double, length);
memset(var->value.darray, 0, length * sizeof(double));
if(length) memset(var->value.darray, 0, length * sizeof(double));
break;
case VAR_BOOL:
var->value.barray = SAFE_MALLOC_ARRAY(bool, length);
memset(var->value.barray, 0, length * sizeof(bool));
if(length) memset(var->value.barray, 0, length * sizeof(bool));
break;
case VAR_CHAR:
var->value.carray = SAFE_MALLOC_ARRAY(char, length);
memset(var->value.carray, 0, length * sizeof(char));
if(length) memset(var->value.carray, 0, length * sizeof(char));
break;
default:
break;
Expand Down Expand Up @@ -3635,7 +3635,7 @@ void handle_return_statement(ASTNode *expr)
}
}
// skibidi main function do not have jump buffer
if (CURRENT_JUMP_BUFFER() != NULL)
if (jump_buffer && CURRENT_JUMP_BUFFER() != NULL)
LONGJMP();
}

Expand Down
4 changes: 2 additions & 2 deletions lang.y
Original file line number Diff line number Diff line change
Expand Up @@ -526,7 +526,6 @@ int main(int argc, char *argv[]) {
}

void yyerror(const char *s) {
extern char *yytext;
fprintf(stderr, "Error: %s at line %d\n", s, yylineno - 1);
}

Expand Down Expand Up @@ -562,7 +561,6 @@ void baka(const char* format, ...) {
}

char slorp_char(char chr) {
size_t chars_read;
input_status status;

status = input_char(&chr);
Expand Down Expand Up @@ -625,6 +623,7 @@ int slorp_int(int val) {
fprintf(stderr, "Error reading integer: %d\n", status);
exit(EXIT_FAILURE);
}
return 0;
}

short slorp_short(short val) {
Expand All @@ -649,6 +648,7 @@ short slorp_short(short val) {
fprintf(stderr, "Error reading short: %d\n", status);
exit(EXIT_FAILURE);
}
return 0;
}

float slorp_float(float var) {
Expand Down
5 changes: 3 additions & 2 deletions lib/mem.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "mem.h"
#include <stdint.h>

/**
* @brief Retrieves the memory block header from a user pointer
Expand Down Expand Up @@ -319,8 +320,8 @@ void *safe_memcpy(void *dest, const void *src, size_t n)
}

// Check for buffer overlap
if ((src < dest && (const char *)src + n > dest) ||
(dest < src && (char *)dest + n > src))
if ((src < dest && (uintptr_t)src + n > (uintptr_t)dest) ||
(dest < src && (uintptr_t)dest + n > (uintptr_t)src))
{
errno = EINVAL;
return NULL;
Expand Down

0 comments on commit cc799c3

Please sign in to comment.