upgrade-apply-deltafs: Fix delta folder bug - if the given path to delta archive... 16/282716/4
authorAntoni Adaszkiewicz <a.adaszkiewi@samsung.com>
Mon, 10 Oct 2022 18:17:59 +0000 (20:17 +0200)
committerAntoni Adaszkiewicz <a.adaszkiewi@samsung.com>
Mon, 7 Nov 2022 14:16:12 +0000 (15:16 +0100)
absolute, in some instances it would cause this program to create an additional directory in
currently upgraded partition (with the same name as the directory the delta was in)

Change-Id: I8648504fa533f1f121f85af31aa40f2f75bf6cb6

src/upgrade-apply-deltafs/ua.c

index 44f011449af2a1acfde05c90ba6c66b782d7f164..218f3a4e8a2f3cda122b5a69934bce173d290f1f 100755 (executable)
@@ -650,16 +650,16 @@ int check_dm_verity_status(void)
  ----------------------------------------------------------------------------*/
 int set_delta_folder(void)
 {
-       char *pos = strrchr(delta_path, '/');
+       char *pos = strrchr(s_update_data.ua_delta_path, '/');
        if (pos == NULL) {
                snprintf(delta_folder, MAX_FOLDER_PATH, ".");   // if no "/" in delta path, assume current directory as delta folder
                return 0;
        }
-       if ((pos - delta_path + 1) == strlen(delta_path)) {
+       if ((pos - s_update_data.ua_delta_path + 1) == strlen(s_update_data.ua_delta_path)) {
                print_usage("Invalid delta path");
                return -1;
        }
-       if (snprintf(delta_folder, (pos - delta_path) + 1, "%s", delta_path) < 0) {
+       if (snprintf(delta_folder, (pos - s_update_data.ua_delta_path) + 1, "%s", s_update_data.ua_delta_path) < 0) {
                LOGE("unexpected snprintf() error\n");
        }
        return 0;
@@ -774,12 +774,17 @@ int main(int argc, char **argv)
 #endif
 
        snprintf(delta_path, sizeof(delta_folder)-1, "%s", my_opt.archive);
+       s_update_data.ua_delta_path = realpath(delta_path, NULL);
+       if (s_update_data.ua_delta_path == NULL) {
+               LOG("provided delta path does not exist!\n");
+               ret = UPI_INVALID_PARAM_ERROR;
+               goto Results;
+       }
        if (set_delta_folder() < 0) {
                ret = UPI_INVALID_PARAM_ERROR;
                goto Results;
        }
        s_update_data.ua_delta_folder = strdup(delta_folder);
-       s_update_data.ua_delta_path = strdup(delta_path);
        snprintf(mnt_point, sizeof(mnt_point)-1, "%s", my_opt.dest);
        snprintf(fota_result, sizeof(fota_result), "%s/%s", result_folder, "result");
 
@@ -832,6 +837,12 @@ int main(int argc, char **argv)
        save_result(ret);
        if (ret != SUCCESS)
                print_error_code(ret);
+
+       if (s_update_data.ua_delta_path)
+               free(s_update_data.ua_delta_path);
+       if (s_part_info.ua_parti_name)
+               free(s_part_info.ua_parti_name);
+
        switch (ret) {
        /* Before initialize fota path */
        case UPI_INVALID_PARAM_ERROR:
@@ -863,9 +874,6 @@ int main(int argc, char **argv)
                LOG("!!! Not expected ret (= %d)\n", ret);
        }
 
-       if(s_part_info.ua_parti_name)   free(s_part_info.ua_parti_name);
-       if(s_part_info.ua_subject_name) free(s_part_info.ua_subject_name);
-
        _exit_stdio();
        return -1;
-}
\ No newline at end of file
+}