diff options
| author | Martin Gieseking <martin.gieseking@uos.de> | 2017-01-08 15:32:47 +0100 |
|---|---|---|
| committer | Frank Richter <frank.richter@gmail.com> | 2017-01-08 15:32:47 +0100 |
| commit | 1aa9f28f7bcbdfff6a84a15ac8d9a87559b1596a (patch) | |
| tree | 25eafcd018bd5383092104aa06b0b296b32f2c5d | |
| parent | 7089b71c01a7fed3c66e2c171bf06ab7c5f5cf6d (diff) | |
| download | icoutils-1aa9f28f7bcbdfff6a84a15ac8d9a87559b1596a.tar.gz | |
prevent access to unallocated memory in wrestool (BZ #1249276)
| -rw-r--r-- | wrestool/extract.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/wrestool/extract.c b/wrestool/extract.c index a203d04..8192a1f 100644 --- a/wrestool/extract.c +++ b/wrestool/extract.c @@ -237,13 +237,15 @@ extract_group_icon_cursor_resource(WinLibrary *fi, WinResource *wr, char *lang, fileicondir->entries[c-skipped].dib_offset = offset; /* transfer resource into file memory */ + if (size > icondir->entries[c].bytes_in_res) + size = icondir->entries[c].bytes_in_res; if (is_icon) { - memcpy(&memory[offset], data, icondir->entries[c].bytes_in_res); + memcpy(&memory[offset], data, size); } else { fileicondir->entries[c-skipped].hotspot_x = ((uint16_t *) data)[0]; fileicondir->entries[c-skipped].hotspot_y = ((uint16_t *) data)[1]; memcpy(&memory[offset], data+sizeof(uint16_t)*2, - icondir->entries[c].bytes_in_res-sizeof(uint16_t)*2); + size-sizeof(uint16_t)*2); offset -= sizeof(uint16_t)*2; } |
