Prevent against OOB read write

This commit is contained in:
ptrstr 2021-10-10 17:16:00 -04:00 committed by Enno T. Boland
parent 2a8d5b1a6b
commit b18e5fe83f

10
smu.c
View file

@ -232,7 +232,7 @@ dolineprefix(const char *begin, const char *end, int newblock) {
} }
/* Skip empty lines in block */ /* Skip empty lines in block */
while(*(buffer + j - 1) == '\n') { while(buffer + j - 1 >= buffer && *(buffer + j - 1) == '\n') {
j--; j--;
} }
@ -557,7 +557,7 @@ dounderline(const char *begin, const char *end, int newblock) {
if(l == 0) if(l == 0)
return 0; return 0;
for(i = 0; i < LENGTH(underline); i++) { for(i = 0; i < LENGTH(underline); i++) {
for(j = 0; p + j != end && p[j] != '\n' && p[j] == underline[i].search[0]; j++); for(j = 0; p + j < end && p[j] != '\n' && p[j] == underline[i].search[0]; j++);
if(j >= l) { if(j >= l) {
fputs(underline[i].before, stdout); fputs(underline[i].before, stdout);
if(underline[i].process) if(underline[i].process)
@ -588,7 +588,7 @@ void
hprint(const char *begin, const char *end) { hprint(const char *begin, const char *end) {
const char *p; const char *p;
for(p = begin; p != end; p++) { for(p = begin; p < end; p++) {
if(*p == '&') if(*p == '&')
fputs("&amp;", stdout); fputs("&amp;", stdout);
else if(*p == '"') else if(*p == '"')
@ -624,10 +624,10 @@ process(const char *begin, const char *end, int newblock) {
fputc(*p, stdout); fputc(*p, stdout);
p++; p++;
} }
for(q = p; q != end && *q == '\n'; q++); for(q = p; q < end && *q == '\n'; q++);
if(q == end) if(q == end)
return; return;
else if(p[0] == '\n' && p + 1 != end && p[1] == '\n') else if(p < end && p[0] == '\n' && p + 1 < end && p[1] == '\n')
newblock = 1; newblock = 1;
else else
newblock = affected < 0; newblock = affected < 0;