From a6ca53aeb229cefb627f3674a917d9ceaa56b5d6 Mon Sep 17 00:00:00 2001 From: Minje Ahn Date: Thu, 22 Jul 2021 17:27:14 +0900 Subject: [PATCH] Fix coverity issue Change-Id: I6c9e854e3f857829b804aecc4f416bec778bfc79 Signed-off-by: Minje Ahn --- src/common/media-svc-util.c | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/common/media-svc-util.c b/src/common/media-svc-util.c index b4c4522..bf20193 100644 --- a/src/common/media-svc-util.c +++ b/src/common/media-svc-util.c @@ -1242,14 +1242,28 @@ static char * __media_svc_find_and_get_value(xmlNodePtr node, const char *key) static gboolean __media_svc_get_epub_root_file(zip_t *z, char **opf_file) { gchar *buf = NULL; + gchar *tmp_buf = NULL; + int len = 0; xmlDocPtr doc = NULL; xmlNodePtr node = NULL; media_svc_retvm_if(!z, FALSE, "z is NULL"); media_svc_retvm_if(!opf_file, FALSE, "opf_file is NULL"); - buf = __media_svc_get_zipfile_data(z, "META-INF/container.xml"); - media_svc_retvm_if(!buf, FALSE, "buf is NULL"); + tmp_buf = __media_svc_get_zipfile_data(z, "META-INF/container.xml"); + media_svc_retvm_if(!tmp_buf, FALSE, "tmp_buf is NULL"); + + len = strlen(tmp_buf); + + while (0 < len) { + len--; + + if (tmp_buf[len] == '>') + break; + } + + buf = g_strndup(tmp_buf, len + 1); + g_free(tmp_buf); doc = xmlParseDoc((const xmlChar *)buf); g_free(buf); @@ -1357,7 +1371,10 @@ static int __media_svc_get_pdf_metadata(media_svc_content_info_s *content_info) search_limit = content_info->size - MEDIA_SVC_PDF_TAG_TAIL_LEN; while (cur_pos <= search_limit) { - lseek(fd, cur_pos, SEEK_SET); + if (lseek(fd, cur_pos, SEEK_SET) == -1) + break; + + memset(&tmp, 0x00, MEDIA_SVC_PDF_BUF_SIZE + 1); if (read(fd, &tmp, MEDIA_SVC_PDF_BUF_SIZE) != MEDIA_SVC_PDF_BUF_SIZE) { media_svc_error("read failed"); @@ -1380,11 +1397,15 @@ static int __media_svc_get_pdf_metadata(media_svc_content_info_s *content_info) //2.get metadata using xml parser if (start_pos && end_pos) { + if (lseek(fd, start_pos, SEEK_SET) == -1) + break; + meta_buf = g_malloc0(end_pos - start_pos + 1); - lseek(fd, start_pos, SEEK_SET); - if (read(fd, meta_buf, end_pos - start_pos) != end_pos - start_pos) + if (read(fd, meta_buf, end_pos - start_pos) != end_pos - start_pos) { + g_free(meta_buf); goto NEXT; + } if (__media_svc_get_xml_metadata((const xmlChar *)meta_buf, TRUE, content_info)) { g_free(meta_buf); -- 2.7.4