mirror of https://github.com/dirtbags/tanks.git
check for overflow during division
This commit is contained in:
parent
575c8da393
commit
578f7361eb
5
forf.c
5
forf.c
|
@ -30,6 +30,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
#include "forf.h"
|
#include "forf.h"
|
||||||
#include "dump.h"
|
#include "dump.h"
|
||||||
|
@ -348,7 +349,7 @@ forf_proc_div(struct forf_env *env)
|
||||||
long a = forf_pop_num(env);
|
long a = forf_pop_num(env);
|
||||||
long b = forf_pop_num(env);
|
long b = forf_pop_num(env);
|
||||||
|
|
||||||
if (0 == a) {
|
if (0 == a || (a == -1 && b == LONG_MIN)) {
|
||||||
env->error = forf_error_divzero;
|
env->error = forf_error_divzero;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -361,7 +362,7 @@ forf_proc_mod(struct forf_env *env)
|
||||||
long a = forf_pop_num(env);
|
long a = forf_pop_num(env);
|
||||||
long b = forf_pop_num(env);
|
long b = forf_pop_num(env);
|
||||||
|
|
||||||
if (0 == a) {
|
if (0 == a || (a == -1 && b == LONG_MIN)) {
|
||||||
env->error = forf_error_divzero;
|
env->error = forf_error_divzero;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue