From: min7.choi Date: Mon, 16 May 2016 02:17:07 +0000 (+0900) Subject: Sync with tizen_2.4 201512 X-Git-Tag: submit/tizen_mobile/20160516.030006^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5428c5441cde609b1af8324fcd33fdf12a80525b;p=platform%2Fframework%2Fweb%2Fdownload-provider.git Sync with tizen_2.4 201512 - 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 --- diff --git a/agent/download-agent-file.c b/agent/download-agent-file.c index 6151569..ca794c0 100755 --- a/agent/download-agent-file.c +++ b/agent/download-agent-file.c @@ -14,6 +14,7 @@ * limitations under the License. */ +#include #include #include #include @@ -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; } diff --git a/agent/download-agent-mime-util.c b/agent/download-agent-mime-util.c index 71e08eb..7fd4329 100755 --- a/agent/download-agent-mime-util.c +++ b/agent/download-agent-mime-util.c @@ -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; diff --git a/agent/include/download-agent-defs.h b/agent/include/download-agent-defs.h index a4efeea..a3319d0 100755 --- a/agent/include/download-agent-defs.h +++ b/agent/include/download-agent-defs.h @@ -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 diff --git a/agent/include/download-agent-type.h b/agent/include/download-agent-type.h index d6ef6aa..cb7357c 100755 --- a/agent/include/download-agent-type.h +++ b/agent/include/download-agent-type.h @@ -17,6 +17,7 @@ #ifndef _DOWNLOAD_AGENT_TYPE_H #define _DOWNLOAD_AGENT_TYPE_H +#include "linux/limits.h" #include "download-agent-defs.h" #include @@ -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 diff --git a/provider/download-provider-client-manager.c b/provider/download-provider-client-manager.c index a10bdf2..e7d6dfe 100644 --- a/provider/download-provider-client-manager.c +++ b/provider/download-provider-client-manager.c @@ -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); diff --git a/provider/download-provider-notification.c b/provider/download-provider-notification.c index 6539dac..cf35bbb 100755 --- a/provider/download-provider-notification.c +++ b/provider/download-provider-notification.c @@ -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; }