diff options
author | Tatsuya Kinoshita <tats@debian.org> | 2016-12-07 12:14:07 +0000 |
---|---|---|
committer | Tatsuya Kinoshita <tats@debian.org> | 2016-12-07 12:24:44 +0000 |
commit | 512ed467d12615f5ef40d0d28272e5662d8438ea (patch) | |
tree | e492027cac055b5dfce919356ed8d51ed3de5bc7 /file.c | |
parent | Prevent overflow beyond the end of string in wtf_strwidth() (diff) | |
download | w3m-512ed467d12615f5ef40d0d28272e5662d8438ea.tar.gz w3m-512ed467d12615f5ef40d0d28272e5662d8438ea.zip |
Prevent overflow beyond the end of string in proc_mchar()
Bug-Debian: https://github.com/tats/w3m/issues/59
Diffstat (limited to 'file.c')
-rw-r--r-- | file.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -2599,6 +2599,8 @@ static void proc_mchar(struct readbuffer *obuf, int pre_mode, int width, char **str, Lineprop mode) { + size_t len; + check_breakpoint(obuf, pre_mode, *str); obuf->pos += width; Strcat_charp_n(obuf->line, *str, get_mclen(*str)); @@ -2607,7 +2609,10 @@ proc_mchar(struct readbuffer *obuf, int pre_mode, if (**str != ' ') obuf->prev_ctype = mode; } - (*str) += get_mclen(*str); + len = get_mclen(*str); + if (len > strlen(*str)) + len = strlen(*str); + (*str) += len; obuf->flag |= RB_NFLUSHED; } |