diff options
| author | Teruaki Kawashima <teru@rockbox.org> | 2010-05-21 13:30:21 +0000 |
|---|---|---|
| committer | Teruaki Kawashima <teru@rockbox.org> | 2010-05-21 13:30:21 +0000 |
| commit | 0ac61bffa799ed4817ffd1079617ef6ac933a3f2 (patch) | |
| tree | 0307bc1fee06745ec724f91f87ff6380d8289ade /firmware/drivers/lcd-bitmap-common.c | |
| parent | e2d1eb6fc8c37efb049cf19a0ca38455149a67d2 (diff) | |
| download | rockbox-0ac61bffa799ed4817ffd1079617ef6ac933a3f2.zip rockbox-0ac61bffa799ed4817ffd1079617ef6ac933a3f2.tar.gz rockbox-0ac61bffa799ed4817ffd1079617ef6ac933a3f2.tar.bz2 rockbox-0ac61bffa799ed4817ffd1079617ef6ac933a3f2.tar.xz | |
avoid overflow in puts_scroll().
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26231 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers/lcd-bitmap-common.c')
| -rw-r--r-- | firmware/drivers/lcd-bitmap-common.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/firmware/drivers/lcd-bitmap-common.c b/firmware/drivers/lcd-bitmap-common.c index 1b31ee8..fba09cf 100644 --- a/firmware/drivers/lcd-bitmap-common.c +++ b/firmware/drivers/lcd-bitmap-common.c @@ -321,6 +321,7 @@ void LCDFN(puts_scroll_style_offset)(int x, int y, const unsigned char *string, struct scrollinfo* s; char *end; int w, h; + int len; if ((unsigned)y >= (unsigned)current_vp->height) return; @@ -358,13 +359,14 @@ void LCDFN(puts_scroll_style_offset)(int x, int y, const unsigned char *string, s->bidir = false; if (!s->bidir) { /* add spaces if scrolling in the round */ - strcat(s->line, " "); + strlcat(s->line, " ", sizeof s->line); /* get new width incl. spaces */ s->width = LCDFN(getstringsize)(s->line, &w, &h); } end = strchr(s->line, '\0'); - strlcpy(end, string, current_vp->width/2); + len = sizeof s->line - (end - s->line); + strlcpy(end, string, MIN(current_vp->width/2, len)); s->vp = current_vp; s->y = y; |