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);
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");
//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);