From bd84e4be6c5dcb0e72b7b588512a442d89f3f71e Mon Sep 17 00:00:00 2001 From: Jim Monte Date: Sat, 25 Apr 2020 19:49:29 +0200 Subject: [PATCH] error messages --- src/frontend/rawfile.c | 18 ++++++++++++++---- src/frontend/spiceif.c | 37 ++++++++++++++++++++++++++----------- 2 files changed, 40 insertions(+), 15 deletions(-) diff --git a/src/frontend/rawfile.c b/src/frontend/rawfile.c index 38dc60684..8767b0064 100644 --- a/src/frontend/rawfile.c +++ b/src/frontend/rawfile.c @@ -464,7 +464,11 @@ raw_read(char *name) { } s = SKIP(buf); if (!*s) { - (void) fgets(buf, BSIZE_SP, fp); + if (fgets(buf, BSIZE_SP, fp) == (char *) NULL) { + fprintf(cp_err, "Error: unable to read line\n"); + plots = NULL; + break; + } s = buf; } if (numdims == 0) { @@ -490,7 +494,10 @@ raw_read(char *name) { if (!i) { curpl->pl_scale = v; } else { - (void) fgets(buf, BSIZE_SP, fp); + if (fgets(buf, BSIZE_SP, fp) == (char *) NULL) { + fprintf(cp_err, "Error: unable to read variable line\n"); + break; + } s = buf; } s = nexttok(s); /* The strchr field. */ @@ -591,7 +598,10 @@ raw_read(char *name) { for (i = 0; i < npoints; i++) { if (is_ascii) { /* It's an ASCII file. */ - (void) fscanf(fp, " %d", &j); + if (fscanf(fp, " %d", &j) != 1) { + fprintf(cp_err, "Error: unable to read point count\n"); + break; + } for (v = curpl->pl_dvecs; v; v = v->v_next) { if (i < v->v_length) { if (flags & VF_REAL) { @@ -657,7 +667,7 @@ raw_read(char *name) { return (NULL); } } - } + } /* end of loop */ if (curpl) { /* reverse commands list */ for (wl = curpl->pl_commands, curpl->pl_commands = NULL; diff --git a/src/frontend/spiceif.c b/src/frontend/spiceif.c index 23f36fec1..9683d3fb1 100644 --- a/src/frontend/spiceif.c +++ b/src/frontend/spiceif.c @@ -1386,7 +1386,11 @@ void com_snload(wordlist *wl) return; } - fread(&tmpI, sizeof(int), 1, file); + if (fread(&tmpI, sizeof(int), 1, file) != 1) { + (void) fprintf(cp_err, "Unable to read spice version from snapshot.\n"); + fclose(file); + return; + } if (tmpI != sizeof(CKTcircuit)) { fprintf(cp_err, "loaded num: %d, expected num: %ld\n", tmpI, (long)sizeof(CKTcircuit)); fprintf(cp_err, "Error: snapshot saved with different version of spice\n"); @@ -1396,7 +1400,11 @@ void com_snload(wordlist *wl) my_ckt = TMALLOC(CKTcircuit, 1); - fread(my_ckt, sizeof(CKTcircuit), 1, file); + if (fread(my_ckt, sizeof(CKTcircuit), 1, file) != 1) { + (void) fprintf(cp_err, "Unable to read spice circuit from snapshot.\n"); + fclose(file); + return; + } #define _t(name) ckt->name = my_ckt->name #define _ta(name, size) \ @@ -1484,17 +1492,24 @@ void com_snload(wordlist *wl) #define _foo(name, type, _size) \ do { \ int __i; \ - fread(&__i, sizeof(int), 1, file); \ - if (__i) { \ - if (name) \ - tfree(name); \ - name = (type *)tmalloc((size_t) __i); \ - fread(name, 1, (size_t) __i, file); \ - } else { \ + if (fread(&__i, sizeof(int), 1, file) == 1 && __i > 0) { \ + if (name) { \ + txfree(name); \ + } \ + name = (type *) tmalloc((size_t) __i); \ + if (fread(name, 1, (size_t) __i, file) != (size_t) __i) { \ + (void) fprintf(cp_err, \ + "Unable to read vector " #name "\n"); \ + break; \ + } \ + } \ + else { \ fprintf(cp_err, "size for vector " #name " is 0\n"); \ } \ - if ((_size) != -1 && __i != (_size) * (int)sizeof(type)) { \ - fprintf(cp_err, "expected %ld, but got %d for "#name"\n", (_size)*(long)sizeof(type), __i); \ + if ((_size) != -1 && __i != \ + (int) (_size) * (int) sizeof(type)) { \ + fprintf(cp_err, "expected %ld, but got %d for "#name"\n", \ + (_size)*(long)sizeof(type), __i); \ } \ } while(0)