summaryrefslogtreecommitdiff
path: root/apps/tree.c
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2003-11-04 16:47:05 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2003-11-04 16:47:05 +0000
commitf97756e73370e0bb4ebe10960cf5db3f048bcc40 (patch)
tree7c7b5c14245e789d2a2bf63c21cc2665fbe725cd /apps/tree.c
parentc6f234a4ccc917d16b21b89b00700391aaacca51 (diff)
downloadrockbox-f97756e73370e0bb4ebe10960cf5db3f048bcc40.tar.gz
rockbox-f97756e73370e0bb4ebe10960cf5db3f048bcc40.zip
Patch #835815 by Henrik Backe, prevents stack overflow in .rockbox browser.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4015 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/tree.c')
-rw-r--r--apps/tree.c42
1 files changed, 29 insertions, 13 deletions
diff --git a/apps/tree.c b/apps/tree.c
index fb62b0ede8..0b41b3af46 100644
--- a/apps/tree.c
+++ b/apps/tree.c
@@ -840,11 +840,18 @@ static bool dirbrowse(char *root, int *dirfilter)
840 memcpy(currdir,root,sizeof(currdir)); 840 memcpy(currdir,root,sizeof(currdir));
841 841
842 if (*dirfilter < NUM_FILTER_MODES) 842 if (*dirfilter < NUM_FILTER_MODES)
843 start_resume(true); 843 start_resume(true);
844 844
845 numentries = showdir(currdir, dirstart, dirfilter); 845 numentries = showdir(currdir, dirstart, dirfilter);
846 if (numentries == -1) 846 if (numentries == -1)
847 return false; /* currdir is not a directory */ 847 return false; /* currdir is not a directory */
848
849 if (*dirfilter > NUM_FILTER_MODES && numentries==0)
850 {
851 splash(HZ*2, 0, true, str(LANG_NO_FILES));
852 return false; /* No files found for rockbox_browser() */
853 }
854
848 update_all = true; 855 update_all = true;
849 856
850 put_cursorxy(CURSOR_X, CURSOR_Y + dircursor, true); 857 put_cursorxy(CURSOR_X, CURSOR_Y + dircursor, true);
@@ -1171,10 +1178,13 @@ static bool dirbrowse(char *root, int *dirfilter)
1171 break; 1178 break;
1172 1179
1173 case TREE_MENU: 1180 case TREE_MENU:
1174 lcd_stop_scroll(); 1181 if (*dirfilter < NUM_FILTER_MODES)
1175 if (main_menu()) 1182 {
1176 reload_root = true; 1183 lcd_stop_scroll();
1177 restore = true; 1184 if (main_menu())
1185 reload_root = true;
1186 restore = true;
1187 }
1178 break; 1188 break;
1179 1189
1180 case BUTTON_ON: 1190 case BUTTON_ON:
@@ -1206,19 +1216,25 @@ static bool dirbrowse(char *root, int *dirfilter)
1206 1216
1207#ifdef HAVE_RECORDER_KEYPAD 1217#ifdef HAVE_RECORDER_KEYPAD
1208 case BUTTON_F2: 1218 case BUTTON_F2:
1209 if (f2_screen()) 1219 if (*dirfilter < NUM_FILTER_MODES)
1210 reload_root = true; 1220 {
1211 restore = true; 1221 if (f2_screen())
1212 break; 1222 reload_root = true;
1223 restore = true;
1224 break;
1225 }
1213 1226
1214 case BUTTON_F3: 1227 case BUTTON_F3:
1215 if (f3_screen()) 1228 if (*dirfilter < NUM_FILTER_MODES)
1216 reload_root = true; 1229 {
1230 if (f3_screen())
1231 reload_root = true;
1217 1232
1218#ifdef HAVE_LCD_BITMAP 1233#ifdef HAVE_LCD_BITMAP
1219 tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh; 1234 tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh;
1220#endif 1235#endif
1221 restore = true; 1236 restore = true;
1237 }
1222 break; 1238 break;
1223#endif 1239#endif
1224 1240