summaryrefslogtreecommitdiff
path: root/apps/plugins/imageviewer
diff options
context:
space:
mode:
authorChristian Soffke <christian.soffke@gmail.com>2022-04-15 17:53:36 +0200
committerSolomon Peachy <pizza@shaftnet.org>2022-04-18 10:58:40 -0400
commite71a4417628278313584789e5c9a463bd2b4bb0a (patch)
tree92d34c2d8898f4d969cfdbc23708d51d6f032c48 /apps/plugins/imageviewer
parent1c66e975222558e8cd80d8ce2cd083370fb157a2 (diff)
downloadrockbox-e71a4417628278313584789e5c9a463bd2b4bb0a.tar.gz
rockbox-e71a4417628278313584789e5c9a463bd2b4bb0a.zip
ImageViewer: Fix buffer overflow
np_file is a buffer of size MAX_PATH. After removing only the file name component and leaving the rest of the path, the available space may not be sufficient for appending another file name (possibly of size MAX_PATH itself) to it. This can occur after a file of acceptable length is opened in ImageViewer, and you then advance to another file whose path (including the file name) is longer than MAX_PATH. Change-Id: Ideadd9451359bd5735bce92fca5d983e61f300e9
Diffstat (limited to 'apps/plugins/imageviewer')
-rw-r--r--apps/plugins/imageviewer/imageviewer.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/apps/plugins/imageviewer/imageviewer.c b/apps/plugins/imageviewer/imageviewer.c
index 4dc7b0a07a..e30a98ef68 100644
--- a/apps/plugins/imageviewer/imageviewer.c
+++ b/apps/plugins/imageviewer/imageviewer.c
@@ -195,7 +195,11 @@ static int change_filename(int direct)
195 return PLUGIN_ERROR; 195 return PLUGIN_ERROR;
196 } 196 }
197 197
198 rb->strcpy(rb->strrchr(np_file, '/')+1, file_pt[curfile]); 198 size_t np_file_length = rb->strlen(np_file);
199 size_t np_file_name_length = rb->strlen(rb->strrchr(np_file, '/')+1);
200 size_t avail_length = sizeof(np_file) - (np_file_length - np_file_name_length);
201
202 rb->snprintf(rb->strrchr(np_file, '/')+1, avail_length, "%s", file_pt[curfile]);
199 203
200 return PLUGIN_OTHER; 204 return PLUGIN_OTHER;
201} 205}