From f3abdf2eb83e5ff3f9fb722f5c7508f5f8db74b6 Mon Sep 17 00:00:00 2001 From: stefan schippers Date: Fri, 1 Nov 2024 00:27:29 +0100 Subject: [PATCH] avoid another crash in case of malformed raw files (if raw->npoints not allocated return without attempting to read raw file) --- src/save.c | 2 +- src/token.c | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/save.c b/src/save.c index 4dea5203..1efe2f10 100644 --- a/src/save.c +++ b/src/save.c @@ -404,7 +404,7 @@ static void read_binary_block(FILE *fd, Raw *raw, int ac) int npoints; int rawvars = raw->nvars; - if(!raw) { + if(!raw || !raw->npoints) { dbg(0, "read_binary_block() no raw struct allocated\n"); return; } diff --git a/src/token.c b/src/token.c index 2941bedc..aeaf8721 100644 --- a/src/token.c +++ b/src/token.c @@ -4303,13 +4303,9 @@ const char *translate2(Lcc *lcc, int level, char* s) } else escape = 0; space = SPACE(c); - if( state==TOK_BEGIN && (c=='@' || c=='%' ) && !escape ) state=TOK_TOKEN; + if( state==TOK_BEGIN && (c=='@' || c=='%' ) ) state=TOK_TOKEN; else if(state==TOK_TOKEN && token_pos > 1 && - ( - ( (space || c == '%' || c == '@') && !escape ) || - ( (!space && c != '%' && c != '@') && escape ) - ) - ) state = TOK_SEP; + ( ( (space || c == '%' || c == '@') ) || escape) ) state = TOK_SEP; STR_ALLOC(&result, result_pos, &size); STR_ALLOC(&token, token_pos, &sizetok); if (state == TOK_TOKEN) token[token_pos++] = (char)c;