From 9390d11886f1eb7ca5e2199399075b41f941ec03 Mon Sep 17 00:00:00 2001 From: tecodev Date: Thu, 27 Sep 2007 22:48:03 +0000 Subject: [PATCH] * src/pic/device.c (find_device): prevent buffer underflow error * src/pic/pcoderegs.c (OptimizeRegUsage): avoid dereferencing the just destroyed list entry git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4920 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 6 ++++++ src/pic/device.c | 8 ++++++-- src/pic/pcoderegs.c | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index bc4483cf..c0fb9e07 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-09-28 Raphael Neider + + * src/pic/device.c (find_device): prevent buffer underflow error + * src/pic/pcoderegs.c (OptimizeRegUsage): avoid dereferencing + the just destroyed list entry + 2007-09-18 Frieder Ferlemann * doc/sdccman.lyx: there's a dedicated wiki page for cmake and sdcc, thanks diff --git a/src/pic/device.c b/src/pic/device.c index 36c0caf0..528cde27 100644 --- a/src/pic/device.c +++ b/src/pic/device.c @@ -278,10 +278,14 @@ static PIC_device *find_device(char *pic_name) /* read line by line */ pic_buf[sizeof(pic_buf)-1] = '\0'; while (fgets(pic_buf, sizeof(pic_buf)-1, pic_file) != NULL && !done) { + unsigned llen; + llen = strlen (pic_buf); /* remove trailing spaces */ - while (isspace(pic_buf[strlen(pic_buf)-1])) - pic_buf[strlen(pic_buf)-1] = '\0'; + while (llen && isspace(pic_buf[llen-1])) { + pic_buf[llen-1] = '\0'; + llen--; + } /* remove leading spaces */ for (pic_buf_pos = pic_buf; isspace(*pic_buf_pos); pic_buf_pos++) diff --git a/src/pic/pcoderegs.c b/src/pic/pcoderegs.c index 8713a30d..3b29b904 100644 --- a/src/pic/pcoderegs.c +++ b/src/pic/pcoderegs.c @@ -848,7 +848,7 @@ void OptimizeRegUsage(set *fregs, int optimize_multi_uses, int optimize_level) } } - rset1 = rset1->next; + rset1 = rset2; } } } -- 2.30.2