Sync with tizen_2.4 201512 69/69569/1 submit/tizen_mobile/20160516.030006 submit/tizen_tv/20160516.030012 submit/tizen_wearable/20160516.030019
authormin7.choi <min7.choi@samsung.com>
Mon, 16 May 2016 02:17:07 +0000 (11:17 +0900)
committermin7.choi <min7.choi@samsung.com>
Mon, 16 May 2016 02:17:12 +0000 (11:17 +0900)
- Modify log level
- Saving of Image with space in it resolved
- Possible fix for the different existing file extesions,
  choose file extension over mime type if both exists.
- Fix SVACE 622008
- Fix file name length problem
- Fix prevent defects in download-agent-file.c
- Fix prevent defects regarding memory leakage
- Fix file name bug
- Fix file name memory problem

Change-Id: I30a39de864308b83eb9b375432445ddb0d17bc33
Signed-off-by: min7.choi <min7.choi@samsung.com>
agent/download-agent-file.c
agent/download-agent-mime-util.c
agent/include/download-agent-defs.h
agent/include/download-agent-type.h
provider/download-provider-client-manager.c
provider/download-provider-notification.c

index 6151569..ca794c0 100755 (executable)
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <stdio.h>
 #include <stdlib.h>
 #include <dirent.h>
 #include <unistd.h>
@@ -69,54 +70,55 @@ ERR:
 
 da_ret_t __divide_file_name_into_pure_name_N_extesion(const char *in_file_name, char **out_pure_file_name, char **out_extension)
 {
-       char *file_name = DA_NULL;
-       char *tmp_ptr = DA_NULL;
-       char temp_file[DA_MAX_FILE_PATH_LEN] = {0,};
-       char tmp_ext[DA_MAX_STR_LEN] = {0,};
-       int len = 0;
-       da_ret_t ret = DA_RESULT_OK;
-
-       DA_LOGV("");
-
-       if (!in_file_name)
-               return DA_ERR_INVALID_ARGUMENT;
-
-       file_name = (char *)in_file_name;
-       tmp_ptr = strrchr(file_name, '.');
-       if (tmp_ptr)
-               tmp_ptr++;
-       if (tmp_ptr && out_extension) {
-               strncpy((char*) tmp_ext, tmp_ptr, sizeof(tmp_ext) - 1);
-               *out_extension = strdup((const char*) tmp_ext);
-               DA_SECURE_LOGD("extension [%s]", *out_extension);
-       }
-
-       if (!out_pure_file_name)
-               return ret;
-
-       if (tmp_ptr)
-               len = tmp_ptr - file_name - 1;
-       else
-               len = strlen(file_name);
-
-       if (len >= DA_MAX_FILE_PATH_LEN) {
-               strncpy((char*) temp_file, file_name,
-                               DA_MAX_FILE_PATH_LEN - 1);
-       } else {
-               strncpy((char*) temp_file, file_name, len);
-       }
-
-       delete_prohibited_char((char*) temp_file,
-                       strlen((char*) temp_file));
-       if (strlen(temp_file) < 1) {
-               *out_pure_file_name = strdup(NO_NAME_TEMP_STR);
-       } else {
-               *out_pure_file_name = strdup(
-                               (const char*) temp_file);
-       }
-
-       DA_LOGV( "pure file name [%s]", *out_pure_file_name);
-       return ret;
+    char *file_name = DA_NULL;
+    char *tmp_ptr = DA_NULL;
+    char temp_file[DA_MAX_FILE_NAME_LEN + 1] = {0,};
+    char tmp_ext[DA_MAX_STR_LEN] = {0,};
+    int len = 0;
+    da_ret_t ret = DA_RESULT_OK;
+
+    DA_LOGD("");
+
+    if (!in_file_name)
+        return DA_ERR_INVALID_ARGUMENT;
+
+    file_name = (char *)in_file_name;
+    tmp_ptr = strrchr(file_name, '.');
+    if (tmp_ptr)
+        tmp_ptr++;
+    if (tmp_ptr && out_extension) {
+        strncpy((char*) tmp_ext, tmp_ptr, sizeof(tmp_ext) - 1);
+        *out_extension = strdup((const char*) tmp_ext);
+        DA_SECURE_LOGD("extension [%s]", *out_extension);
+    }
+
+    if (!out_pure_file_name)
+        return ret;
+
+    if (tmp_ptr)
+        len = tmp_ptr - file_name - 1;
+    else
+        len = strlen(file_name);
+
+    if (len >= DA_MAX_FILE_NAME_LEN) {
+        strncpy((char*) temp_file, file_name, DA_MAX_FILE_NAME_LEN);
+        temp_file[DA_MAX_FILE_NAME_LEN] = '\0';
+    } else {
+        strncpy((char*) temp_file, file_name, len);
+        temp_file[len] = '\0';
+    }
+
+    delete_prohibited_char((char*) temp_file,
+            strlen((char*) temp_file));
+    if (strlen(temp_file) < 1) {
+        *out_pure_file_name = strdup(NO_NAME_TEMP_STR);
+    } else {
+        *out_pure_file_name = strdup(
+                (const char*) temp_file);
+    }
+
+    DA_LOGV( "pure file name [%s]", *out_pure_file_name);
+    return ret;
 }
 
 da_ret_t __file_write_buf_make_buf(file_info_t *file_info)
@@ -269,10 +271,16 @@ char *__get_extension_name(char *mime_type,
 
        /* Priority 1 */
        if (mime_type && !is_ambiguous_MIME_Type(mime_type)) {
-               char *extension = DA_NULL;
-               da_ret_t ret = get_extension_from_mime_type(mime_type, &extension);
-               if (ret == DA_RESULT_OK && extension)
-                       return extension;
+           if (url) {
+               DA_LOGV("If the file extension exists and mime type exists, choose the file extension over mime type");
+               da_bool_t b_ret = da_get_extension_name_from_url(url, &extension);
+               if (b_ret && extension)
+                   return extension;
+           }
+           char *extension = DA_NULL;
+           da_ret_t ret = get_extension_from_mime_type(mime_type, &extension);
+           if (ret == DA_RESULT_OK && extension)
+               return extension;
        }
        /* Priority 2-1 */
        if (file_name_from_header) {
@@ -305,7 +313,7 @@ da_ret_t __get_candidate_file_name(char *user_file_name, char *url,
 {
        da_ret_t ret = DA_RESULT_OK;
 
-       DA_LOGV("");
+       DA_LOGD("");
 
        /* Priority 1 */
        if (user_file_name) {
@@ -324,7 +332,7 @@ da_ret_t __get_candidate_file_name(char *user_file_name, char *url,
                return ret ;
        /* Priority 3 */
        if (url) {
-               DA_LOGV("Get file name from url");
+               DA_LOGD("Get file name from url");
                da_get_file_name_from_url(url, out_pure_file_name);
        }
        if (*out_pure_file_name)
@@ -408,19 +416,21 @@ da_ret_t __decide_file_path(da_info_t *da_info)
 
        // for resume
        tmp_file_path = get_full_path_avoided_duplication(install_dir,
-                       file_info->pure_file_name, file_info->extension);
+               file_info->pure_file_name, file_info->extension);
        if (tmp_file_path) {
-               file_info->file_path = tmp_file_path;
-               tmp_file_path = DA_NULL;
+           file_info->file_path = tmp_file_path;
+           tmp_file_path = DA_NULL;
        } else {
-               ret = DA_ERR_FAIL_TO_ACCESS_FILE;
-               goto ERR;
+           ret = DA_ERR_FAIL_TO_ACCESS_FILE;
+           goto ERR;
        }
 
 ERR:
        DA_SECURE_LOGI("decided file path [%s]", file_info->file_path);
-       free(file_name);
-       free(extension);
+       if(file_name)
+           free(file_name);
+       if(extension)
+           free(extension);
        return ret;
 }
 
index 71e08eb..7fd4329 100755 (executable)
@@ -23,7 +23,7 @@
 #include "download-agent-mime-util.h"
 #include "download-agent-pthread.h"
 
-#define IS_PROHIBITED_CHAR(c)  ((c) == ';' || (c) == '\\' || (c) == '/' || (c) == ':' || (c) == '*' || (c) == '?' || (c) == '"' || (c) == '>' || (c) == '<' || (c) == '|' || (c) == '(' || (c) == ')')
+#define IS_PROHIBITED_CHAR(c)   ((c) == '/' || (c) == '\\' || (c) == '?' || (c) == '%' || (c) == '*' || (c) == ':' || (c) == '|' || (c) == '"' || (c) == '<' || (c) == '>')
 #define IS_SPACE_CHARACTER(c)  ((c) == '\t')
 
 #define MAX_EXT_TABLE_INDEX 16
@@ -254,7 +254,7 @@ da_bool_t da_get_file_name_from_url(char *url, char **name)
        int i = 0;
        int j = 0;
        int len_name = 0;
-       char name_buff[DA_MAX_FILE_PATH_LEN] = {0,};
+    char name_buff[DA_MAX_FILE_NAME_LEN + 1] = {0,};
 
        DA_LOGV("");
 
@@ -289,23 +289,23 @@ da_bool_t da_get_file_name_from_url(char *url, char **name)
        }
        End = strstr(buff, "?");
        if (DA_NULL != End) {
-               Start = End -1;
-               while(*(Start) != '/') {
-                       Start--;
-               }
-               if ((*(Start) == '/') && ((len_name = (End - Start)) > 1)) {
-                       Start++;
-                       if (DA_MAX_FILE_PATH_LEN <= len_name)   {
-                               strncpy(name_buff, Start, DA_MAX_FILE_PATH_LEN-1);
-                               name_buff[DA_MAX_FILE_PATH_LEN-1] = '\0';
-                       } else {
-                               strncpy(name_buff, Start, len_name);
-                               name_buff[len_name] = '\0';
-                       }
-               } else {
-                       ret = DA_FALSE;
-                       goto ERR ; /*Name not found*/
-               }
+           Start = End -1;
+           while(*(Start) != '/') {
+               Start--;
+           }
+           if ((*(Start) == '/') && ((len_name = (End - Start)) > 1)) {
+               Start++;
+               if (DA_MAX_FILE_NAME_LEN <= len_name)   {
+                   strncpy(name_buff, Start, DA_MAX_FILE_NAME_LEN);
+                   name_buff[DA_MAX_FILE_NAME_LEN] = '\0';
+               } else {
+                   strncpy(name_buff, Start, len_name);
+                   name_buff[len_name] = '\0';
+               }
+           } else {
+               ret = DA_FALSE;
+               goto ERR ; /*Name not found*/
+           }
        } else {
                int urlLen = strlen (buff);
                int Start_pos = 0;
@@ -318,15 +318,15 @@ da_bool_t da_get_file_name_from_url(char *url, char **name)
                }
                Start_pos++;
                if (Start_pos == 0 || urlLen - Start_pos <= 0) {
-                       ret = DA_FALSE;
-                       goto ERR;
+                   ret = DA_FALSE;
+                   goto ERR;
                }
                while(Start_pos < urlLen) {
-                       name_buff[len_name++] = buff[Start_pos++];
-                       if (DA_MAX_FILE_PATH_LEN <= len_name) {
-                               name_buff[DA_MAX_FILE_PATH_LEN-1] ='\0';
-                               break;
-                       }
+                   name_buff[len_name++] = buff[Start_pos++];
+                   if (DA_MAX_FILE_NAME_LEN <= len_name) {
+                       name_buff[DA_MAX_FILE_NAME_LEN] ='\0';
+                       break;
+                   }
                }
        }
 
@@ -358,7 +358,7 @@ void delete_prohibited_char(char *szTarget, int str_len)
        int i = 0;
        int j = 0;
        int tar_len = 0;
-
+    DA_LOGD("");
        if(szTarget == NULL || str_len <= 0 || strlen(szTarget) != str_len) {
                DA_LOGE("Invaild Parameter\n");
                return;
index a4efeea..a3319d0 100755 (executable)
@@ -79,7 +79,7 @@
 #define DA_ERR_DRM_FAIL                        -600
 
 // string to check invalid characters in path before using open() and fopen() API's
-#define DA_INVALID_PATH_STRING ";\\\":*?<>|"
+#define DA_INVALID_PATH_STRING "/\\?%*:|\"<>"
 
 #endif
 
index d6ef6aa..cb7357c 100755 (executable)
@@ -17,6 +17,7 @@
 #ifndef _DOWNLOAD_AGENT_TYPE_H
 #define _DOWNLOAD_AGENT_TYPE_H
 
+#include "linux/limits.h"
 #include "download-agent-defs.h"
 #include <tzplatform_config.h>
 
@@ -27,8 +28,8 @@ typedef unsigned long long da_size_t;
 #define IS_NOT_VALID_ID(x)  (x <= DA_INVALID_ID)
 
 #define DA_MAX_URI_LEN                 1024
-#define DA_MAX_FULL_PATH_LEN   356     // need configuration
-#define DA_MAX_FILE_PATH_LEN           256     // need configuration
+#define DA_MAX_FULL_PATH_LEN    PATH_MAX - 1 /* 4096 -1 chars in a path name excluding NULL */
+#define DA_MAX_FILE_NAME_LEN    NAME_MAX /* 255 chars in a file name excluding NULL */
 #define DA_MAX_STR_LEN                 256
 #define DA_MAX_MIME_STR_LEN            256
 #define DA_MAX_PROXY_ADDR_LEN  64              // e.g. 100.200.300.400:10000
index a10bdf2..e7d6dfe 100644 (file)
@@ -127,6 +127,12 @@ static int __dp_accept_socket_new()
 {
        int fd_base, listen_fds = sd_listen_fds(1);
        TRACE_DEBUG("sd_listen_fds:%d", listen_fds);
+
+    if(listen_fds > INT_MAX) {
+        TRACE_DEBUG("sd_listen_fds:%d", listen_fds);
+        return -1;
+    }
+
        for (fd_base = 0 ; fd_base < listen_fds; fd_base++) {
                if (sd_is_socket_unix(fd_base + SD_LISTEN_FDS_START, SOCK_STREAM, 1, IPC_SOCKET, 0) >= 0) {
                        TRACE_INFO("listen systemd socket:%d", fd_base + SD_LISTEN_FDS_START);
index 6539dac..cf35bbb 100755 (executable)
@@ -256,7 +256,7 @@ void dp_notification_clear_ongoings()
        int err = NOTIFICATION_ERROR_NONE;
        err = notification_delete_all_by_type(NULL, NOTIFICATION_TYPE_ONGOING);
        if (err != NOTIFICATION_ERROR_NONE) {
-               TRACE_ERROR("[FAIL] clear noti [%s]", __dp_noti_error_str(err));
+               TRACE_DEBUG("[FAIL] clear noti [%s]", __dp_noti_error_str(err));
        }
        return;
 }