Просмотр исходного кода

BadUSB and Archive fixes (#2005)

* BsdUsb: fix empty lines handling
* Archive: folders and unknown files rename fix

Co-authored-by: あく <alleteam@gmail.com>
Nikolay Minaylov 3 лет назад
Родитель
Сommit
73441af9c6

+ 1 - 1
applications/main/archive/scenes/archive_scene_browser.c

@@ -133,7 +133,7 @@ bool archive_scene_browser_on_event(void* context, SceneManagerEvent event) {
         case ArchiveBrowserEventFileMenuRename:
         case ArchiveBrowserEventFileMenuRename:
             if(favorites) {
             if(favorites) {
                 browser->callback(ArchiveBrowserEventEnterFavMove, browser->context);
                 browser->callback(ArchiveBrowserEventEnterFavMove, browser->context);
-            } else if((archive_is_known_app(selected->type)) && (selected->is_app == false)) {
+            } else if(selected->is_app == false) {
                 archive_show_file_menu(browser, false);
                 archive_show_file_menu(browser, false);
                 scene_manager_set_scene_state(
                 scene_manager_set_scene_state(
                     archive->scene_manager, ArchiveAppSceneBrowser, SCENE_STATE_NEED_REFRESH);
                     archive->scene_manager, ArchiveAppSceneBrowser, SCENE_STATE_NEED_REFRESH);

+ 3 - 1
applications/main/archive/scenes/archive_scene_rename.c

@@ -57,9 +57,11 @@ bool archive_scene_rename_on_event(void* context, SceneManagerEvent event) {
             ArchiveFile_t* file = archive_get_current_file(archive->browser);
             ArchiveFile_t* file = archive_get_current_file(archive->browser);
 
 
             FuriString* path_dst;
             FuriString* path_dst;
+
             path_dst = furi_string_alloc();
             path_dst = furi_string_alloc();
             path_extract_dirname(path_src, path_dst);
             path_extract_dirname(path_src, path_dst);
-            furi_string_cat_printf(path_dst, "/%s%s", archive->text_store, known_ext[file->type]);
+            furi_string_cat_printf(
+                path_dst, "/%s%s", archive->text_store, archive->file_extension);
 
 
             storage_common_rename(fs_api, path_src, furi_string_get_cstr(path_dst));
             storage_common_rename(fs_api, path_src, furi_string_get_cstr(path_dst));
             furi_record_close(RECORD_STORAGE);
             furi_record_close(RECORD_STORAGE);

+ 0 - 1
applications/main/archive/views/archive_browser_view.c

@@ -65,7 +65,6 @@ static void render_item_menu(Canvas* canvas, ArchiveBrowserViewModel* model) {
     if(!archive_is_known_app(selected->type)) {
     if(!archive_is_known_app(selected->type)) {
         furi_string_set(menu[0], "---");
         furi_string_set(menu[0], "---");
         furi_string_set(menu[1], "---");
         furi_string_set(menu[1], "---");
-        furi_string_set(menu[2], "---");
     } else {
     } else {
         if(model->tab_idx == ArchiveTabFavorites) {
         if(model->tab_idx == ArchiveTabFavorites) {
             furi_string_set(menu[2], "Move");
             furi_string_set(menu[2], "Move");

+ 6 - 8
applications/main/bad_usb/bad_usb_script.c

@@ -237,12 +237,8 @@ static int32_t
     const char* line_tmp = furi_string_get_cstr(line);
     const char* line_tmp = furi_string_get_cstr(line);
     bool state = false;
     bool state = false;
 
 
-    for(uint32_t i = 0; i < line_len; i++) {
-        if((line_tmp[i] != ' ') && (line_tmp[i] != '\t') && (line_tmp[i] != '\n')) {
-            line_tmp = &line_tmp[i];
-            break; // Skip spaces and tabs
-        }
-        if(i == line_len - 1) return SCRIPT_STATE_NEXT_LINE; // Skip empty lines
+    if(line_len == 0) {
+        return SCRIPT_STATE_NEXT_LINE; // Skip empty lines
     }
     }
 
 
     FURI_LOG_D(WORKER_TAG, "line:%s", line_tmp);
     FURI_LOG_D(WORKER_TAG, "line:%s", line_tmp);
@@ -450,10 +446,12 @@ static int32_t ducky_script_execute_next(BadUsbScript* bad_usb, File* script_fil
                 bad_usb->st.line_cur++;
                 bad_usb->st.line_cur++;
                 bad_usb->buf_len = bad_usb->buf_len + bad_usb->buf_start - (i + 1);
                 bad_usb->buf_len = bad_usb->buf_len + bad_usb->buf_start - (i + 1);
                 bad_usb->buf_start = i + 1;
                 bad_usb->buf_start = i + 1;
+                furi_string_trim(bad_usb->line);
                 delay_val = ducky_parse_line(
                 delay_val = ducky_parse_line(
                     bad_usb, bad_usb->line, bad_usb->st.error, sizeof(bad_usb->st.error));
                     bad_usb, bad_usb->line, bad_usb->st.error, sizeof(bad_usb->st.error));
-
-                if(delay_val < 0) {
+                if(delay_val == SCRIPT_STATE_NEXT_LINE) { // Empty line
+                    return 0;
+                } else if(delay_val < 0) {
                     bad_usb->st.error_line = bad_usb->st.line_cur;
                     bad_usb->st.error_line = bad_usb->st.line_cur;
                     FURI_LOG_E(WORKER_TAG, "Unknown command at line %u", bad_usb->st.line_cur);
                     FURI_LOG_E(WORKER_TAG, "Unknown command at line %u", bad_usb->st.line_cur);
                     return SCRIPT_STATE_ERROR;
                     return SCRIPT_STATE_ERROR;

+ 1 - 1
lib/toolbox/path.c

@@ -38,7 +38,7 @@ void path_extract_extension(FuriString* path, char* ext, size_t ext_len_max) {
     size_t dot = furi_string_search_rchar(path, '.');
     size_t dot = furi_string_search_rchar(path, '.');
     size_t filename_start = furi_string_search_rchar(path, '/');
     size_t filename_start = furi_string_search_rchar(path, '/');
 
 
-    if((dot > 0) && (filename_start < dot)) {
+    if((dot != FURI_STRING_FAILURE) && (filename_start < dot)) {
         strlcpy(ext, &(furi_string_get_cstr(path))[dot], ext_len_max);
         strlcpy(ext, &(furi_string_get_cstr(path))[dot], ext_len_max);
     }
     }
 }
 }