Browse code

fix invalid free() (bb#809)

git-svn: trunk@3576

Tomasz Kojm authored on 2008/02/04 03:08:12
Showing 2 changed files
... ...
@@ -1,3 +1,7 @@
1
+Sun Feb  3 18:49:57 CET 2008 (tk)
2
+---------------------------------
3
+  * libclamav/chmunpack.c: fix invalid free() (bb#809)
4
+
1 5
 Sun Feb  3 10:38:08 EET 2008 (edwin)
2 6
 ------------------------------------
3 7
   * libclamav/entconv.c: don't leave return value uninitialized. (bb #808).
... ...
@@ -481,7 +481,7 @@ static int read_chunk(chm_metadata_t *metadata, int fd)
481 481
 		metadata->chunk_entries = (uint16_t)((((uint8_t const *)(metadata->chunk_data))[metadata->itsp_hdr.block_len-2] << 0)
482 482
 					| (((uint8_t const *)(metadata->chunk_data))[metadata->itsp_hdr.block_len-1] << 8));
483 483
 	} else if (memcmp(metadata->chunk_data, "PMGI", 4) != 0) {
484
-		if (metadata->m_area != NULL) {
484
+		if (!metadata->m_area && metadata->chunk_data) {
485 485
 			free(metadata->chunk_data);
486 486
 		}
487 487
 		return CL_BREAK;
... ...
@@ -489,7 +489,7 @@ static int read_chunk(chm_metadata_t *metadata, int fd)
489 489
 
490 490
 	return CL_SUCCESS;
491 491
 abort:
492
-	if (metadata->m_area != NULL) {
492
+	if (!metadata->m_area && metadata->chunk_data) {
493 493
 		free(metadata->chunk_data);
494 494
 		metadata->chunk_data = NULL;
495 495
 	}
... ...
@@ -785,7 +785,6 @@ static int chm_init_metadata(chm_metadata_t *metadata)
785 785
 	
786 786
 	metadata->sys_control.length = metadata->sys_content.length = metadata->sys_reset.length = 0;
787 787
 	metadata->m_area = NULL;
788
-	metadata->m_area = 0;
789 788
 	metadata->ufd = -1;
790 789
 	metadata->num_chunks = metadata->chunk_entries = 0;
791 790
 	metadata->chunk_data = NULL;
... ...
@@ -802,7 +801,7 @@ void cli_chm_close(chm_metadata_t *metadata)
802 802
 	}
803 803
 #ifdef HAVE_MMAP
804 804
 	if (metadata->m_area) {
805
-		munmap(metadata->m_area, metadata-> m_length);
805
+		munmap(metadata->m_area, metadata->m_length);
806 806
 	}
807 807
 #endif
808 808
 }