diff options
author | Frank Gevaerts <frank@gevaerts.be> | 2014-01-09 23:20:48 +0100 |
---|---|---|
committer | Frank Gevaerts <frank@gevaerts.be> | 2014-01-09 23:30:32 +0100 |
commit | 837cad0d382e5600e68bb4ed6d499e6053fa50e5 (patch) | |
tree | 28a12eef9e4a7ce1448dc6a3a31602f4537aa90f /firmware/bidi.c | |
parent | 99f3f77ee87ad06e0d5a7572c2ebaaf76c526ac1 (diff) | |
download | rockbox-837cad0d382e5600e68bb4ed6d499e6053fa50e5.tar.gz rockbox-837cad0d382e5600e68bb4ed6d499e6053fa50e5.zip |
bidi.c: Check buffer sizes.
This could cause a crash with certain themes and long filenames.
Change-Id: I0a48c91bb089b122a56c4e126ba4d7a175399fa2
Diffstat (limited to 'firmware/bidi.c')
-rw-r--r-- | firmware/bidi.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/firmware/bidi.c b/firmware/bidi.c index 2f4e137956..c19412693e 100644 --- a/firmware/bidi.c +++ b/firmware/bidi.c | |||
@@ -144,6 +144,7 @@ unsigned short *bidi_l2v(const unsigned char *str, int orientation) | |||
144 | unsigned short *heb_str; /* *broken_str */ | 144 | unsigned short *heb_str; /* *broken_str */ |
145 | int block_start, block_end, block_type, block_length, i; | 145 | int block_start, block_end, block_type, block_length, i; |
146 | int length = utf8length(str); | 146 | int length = utf8length(str); |
147 | length=length>=SCROLL_LINE_SIZE?SCROLL_LINE_SIZE-1:length; | ||
147 | #endif | 148 | #endif |
148 | /* | 149 | /* |
149 | long max_chars=0; | 150 | long max_chars=0; |
@@ -152,7 +153,7 @@ unsigned short *bidi_l2v(const unsigned char *str, int orientation) | |||
152 | tmp = str; | 153 | tmp = str; |
153 | */ | 154 | */ |
154 | target = tmp = utf16_buf; | 155 | target = tmp = utf16_buf; |
155 | while (*str) | 156 | while (*str && target < &utf16_buf[SCROLL_LINE_SIZE-1]) |
156 | str = utf8decode(str, target++); | 157 | str = utf8decode(str, target++); |
157 | *target = 0; | 158 | *target = 0; |
158 | 159 | ||