From 300a5dea173dc1da310cb334d3ab4354bed2326c Mon Sep 17 00:00:00 2001 From: ketmar Date: Sat, 28 May 2022 18:34:25 +0000 Subject: [PATCH] allow reading some corrupted ALASM files FossilOrigin-Name: 433a5a6d946e5b3f5a226b0de5c5cbd2390286faa70b592655f0b8085cc8456a --- uniconverter/src/cvtalasm/alasm.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/uniconverter/src/cvtalasm/alasm.c b/uniconverter/src/cvtalasm/alasm.c index 4f28c46..c11276a 100644 --- a/uniconverter/src/cvtalasm/alasm.c +++ b/uniconverter/src/cvtalasm/alasm.c @@ -22,21 +22,21 @@ static const char *regstkn3[] = { #define GETBYTE(_dst) do { \ - if (--buflen < 0) { free(buf); return -1; } \ + if (--buflen < 0) { fprintf(stderr, "OUT of data...\n"); /*free(buf); return -1;*/ (_dst) = 0; break; } \ (_dst) = *p++; \ } while (0) #define PUTCH(_ch) do { \ uint8_t _xch = (uint8_t)(_ch); \ - if (fwrite(&_xch, 1, 1, fo) != 1) { free(buf); return -1; } \ + if (fwrite(&_xch, 1, 1, fo) != 1) { fprintf(stderr, "ERROR writing...\n"); free(buf); return -1; } \ } while (0) #define PUTCH_TK(_ch) do { \ uint8_t _xch = (uint8_t)(_ch); \ if (locaseTokens && _xch >= 'A' && _xch <= 'Z') _xch = _xch-'A'+'a'; \ - if (fwrite(&_xch, 1, 1, fo) != 1) { free(buf); return -1; } \ + if (fwrite(&_xch, 1, 1, fo) != 1) { fprintf(stderr, "ERROR writing...\n"); free(buf); return -1; } \ } while (0) @@ -45,8 +45,15 @@ static int extract (FILE *fo, FILE *fi) { uint8_t *buf; const uint8_t *p; // - if ((buf = loadWholeFile(fi, &buflen)) == NULL) return -1; - if ((buflen -= 0x39+8+16) < 0) { free(buf); return -1; } + if ((buf = loadWholeFile(fi, &buflen)) == NULL) { + fprintf(stderr, "ERROR loading...\n"); + return -1; + } + if ((buflen -= 0x39+8+16) < 0) { + free(buf); + fprintf(stderr, "BAD buffer size...\n"); + return -1; + } p = buf+0x39+8+16; // for (;;) { -- 2.11.4.GIT