| 
					
				 | 
			
			
				@@ -1,39 +1,95 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-made apply cleanly based on the following commits: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-commit 27a14bc7ba285a0a5ebfdb55e54001aa11932b08 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Subject: Buffer overflow in the mconvert function allows remote attackers to cause a denial of service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ID: CVE-2014-3478 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Author: Christos Zoulas <christos@zoulas.com> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Date:   Wed Jun 4 17:36:34 2014 +0000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Date: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Wed Jun 4 17:36:34 2014 +0000 (A) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Wed Dec 22 18:14:05 2010 +0000 (B) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Wed Dec 22 19:09:10 2010 +0000 (C) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Origin: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    commit 27a14bc7ba285a0a5ebfdb55e54001aa11932b08 (A) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    commit 2f0eeb07ba633f1d915f78a50b22808123b38ea0 (B) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    commit 57e4574e062e538b16b225e822ece6ca0ce539b8 (C) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Debian-Author: Holger Levsen <holger@debian.org> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Comment: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ made apply cleanly based on the [above] commits 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Reviewed-By: Christoph Biedl <debian.axhn@manchmal.in-ulm.de> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Last-Update: 2014-09-07 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    [ A: ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     Correctly compute the truncated pascal string size (Francisco Alonso and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     Jan Kaluza at RedHat) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-commit 2f0eeb07ba633f1d915f78a50b22808123b38ea0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Author: Christos Zoulas <christos@zoulas.com> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Date:   Wed Dec 22 18:14:05 2010 +0000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    [ B: ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     support for various formats of pascal strings. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-commit 57e4574e062e538b16b225e822ece6ca0ce539b8 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Author: Christos Zoulas <christos@zoulas.com> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Date:   Wed Dec 22 19:09:10 2010 +0000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    [ C: ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     don't undo our initialization 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-diff --git a/src/softmagic.c b/src/softmagic.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-index 9ba500b..6d69419 100644 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 --- a/src/softmagic.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 +++ b/src/softmagic.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -800,10 +800,18 @@ mconvert(struct magic_set *ms, struct magic *m, int flip) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@@ -169,6 +169,8 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 			continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				++		if ((e = handle_annotation(ms, m)) != 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				++			return e; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 		/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 		 * If we are going to print something, we'll need to print 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 		 * a blank before we print something else. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@@ -176,8 +178,6 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 		if (*m->desc) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 			need_separator = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 			printed_something = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-			if ((e = handle_annotation(ms, m)) != 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-				return e; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 			if (print_sep(ms, firstline) == -1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 				return -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@@ -252,13 +252,13 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 					ms->c.li[cont_level].got_match = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 					break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				++				if ((e = handle_annotation(ms, m)) != 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				++					return e; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 				/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 				 * If we are going to print something, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 				 * make sure that we have a separator first. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 				if (*m->desc) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-					if ((e = handle_annotation(ms, m)) != 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-						return e; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 					if (!printed_something) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 						printed_something = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 						if (print_sep(ms, firstline) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@@ -450,7 +450,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 				return -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 			t = ms->offset + strlen(p->s); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 			if (m->type == FILE_PSTRING) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-				t++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				++				t += file_pstring_length_size(m); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@@ -615,7 +615,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 				p->s[strcspn(p->s, "\n")] = '\0'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 			t = CAST(uint32_t, (ms->offset + strlen(p->s))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 			if (m->type == FILE_PSTRING) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-				t++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				++				t += file_pstring_length_size(m); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 			return t; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@@ -800,10 +800,18 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  		return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  	case FILE_PSTRING: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 -		char *ptr1 = p->s, *ptr2 = ptr1 + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 -	size_t len = *p->s; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-		if (len >= sizeof(p->s)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-			len = sizeof(p->s) - 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 +		size_t sz = file_pstring_length_size(m); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 +		char *ptr1 = p->s, *ptr2 = ptr1 + sz; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 +		size_t len = file_pstring_get_length(m, ptr1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		if (len >= sizeof(p->s)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--			len = sizeof(p->s) - 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 +		if (len >= sizeof(p->s)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 +			/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 +			 * The size of the pascal string length (sz) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -46,11 +102,9 @@ index 9ba500b..6d69419 100644 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  		while (len--) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  			*ptr1++ = *ptr2++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  		*ptr1 = '\0'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-diff --git a/doc/magic.man b/doc/magic.man 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-index 8486645..299bb8d 100644 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 --- a/doc/magic.man 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 +++ b/doc/magic.man 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -71,8 +71,22 @@ characters in the magic match both lower and upper case characters in the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@@ -71,8 +71,22 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  target, whereas upper case characters in the magic only match uppercase 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  characters in the target. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  .It Dv pstring 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -74,11 +128,9 @@ index 8486645..299bb8d 100644 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  The string is not NUL terminated. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  .It Dv date 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  A four-byte value interpreted as a UNIX date. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-diff --git a/src/apprentice.c b/src/apprentice.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-index 40d547b..1120a69 100644 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 --- a/src/apprentice.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 +++ b/src/apprentice.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -932,6 +932,11 @@ string_modifier_check(struct magic_set *ms, struct magic *m) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@@ -932,6 +932,11 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  	if ((ms->flags & MAGIC_CHECK) == 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  		return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -90,16 +142,17 @@ index 40d547b..1120a69 100644 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  	switch (m->type) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  	case FILE_BESTRING16: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  	case FILE_LESTRING16: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1308,7 +1308,7 @@ parse(struct magic_set *ms, struct magic_entry **mentryp, uint32_t *nmentryp, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@@ -1308,8 +1313,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  		++l; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  	m->str_range = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 -	m->str_flags = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-	m->num_mask = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 +	m->str_flags = m->type == FILE_PSTRING ? PSTRING_1_LE : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	m->num_mask = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  	if ((op = get_op(*l)) != -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  		if (!IS_STRING(m->type)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1362,6 +1362,32 @@ parse(struct magic_set *ms, struct magic_entry **mentryp, uint32_t *nmentryp, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 			uint64_t val; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@@ -1362,6 +1366,32 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  				case CHAR_TEXTTEST: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  					m->str_flags |= STRING_TEXTTEST; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  					break; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -132,7 +185,7 @@ index 40d547b..1120a69 100644 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  				default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  					if (ms->flags & MAGIC_CHECK) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  						file_magwarn(ms, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1990,7 +1990,7 @@ out: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@@ -1990,7 +2020,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  	*p = '\0'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  	m->vallen = CAST(unsigned char, (p - origp)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  	if (m->type == FILE_PSTRING) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -141,7 +194,16 @@ index 40d547b..1120a69 100644 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  	return s; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2379,3 +2379,40 @@ bs1(struct magic *m) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@@ -2371,6 +2401,8 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 	m->in_offset = swap4((uint32_t)m->in_offset); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 	m->lineno = swap4((uint32_t)m->lineno); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 	if (IS_STRING(m->type)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				++		if (m->type == FILE_PSTRING) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				++			printf("flags! %d\n", m->str_flags); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 		m->str_range = swap4(m->str_range); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 		m->str_flags = swap4(m->str_flags); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@@ -2379,3 +2411,40 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  		m->num_mask = swap8(m->num_mask); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -182,11 +244,9 @@ index 40d547b..1120a69 100644 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 +		return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 +	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 +} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-diff --git a/src/file.h b/src/file.h 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-index 25cd3a5..c84749f 100644 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 --- a/src/file.h 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 +++ b/src/file.h 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -285,6 +285,14 @@ struct magic { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@@ -285,6 +285,14 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  #define REGEX_OFFSET_START			BIT(4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  #define STRING_TEXTTEST				BIT(5) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  #define STRING_BINTEST				BIT(6) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -201,7 +261,7 @@ index 25cd3a5..c84749f 100644 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  #define CHAR_COMPACT_WHITESPACE			'W' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  #define CHAR_COMPACT_OPTIONAL_WHITESPACE	'w' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  #define CHAR_IGNORE_LOWERCASE			'c' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -292,6 +292,12 @@ struct magic { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@@ -292,6 +300,12 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  #define CHAR_REGEX_OFFSET_START			's' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  #define CHAR_TEXTTEST				't' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  #define CHAR_BINTEST				'b' 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -214,7 +274,7 @@ index 25cd3a5..c84749f 100644 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  #define STRING_IGNORE_CASE		(STRING_IGNORE_LOWERCASE|STRING_IGNORE_UPPERCASE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  #define STRING_DEFAULT_RANGE		100 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -400,6 +400,8 @@ protected ssize_t sread(int, void *, size_t, int); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@@ -400,6 +414,8 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  protected int file_check_mem(struct magic_set *, unsigned int); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  protected int file_looks_utf8(const unsigned char *, size_t, unichar *, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      size_t *); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -223,80 +283,3 @@ index 25cd3a5..c84749f 100644 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  #ifdef __EMX__ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  protected int file_os2_apptype(struct magic_set *, const char *, const void *, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      size_t); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-diff --git a/src/softmagic.c b/src/softmagic.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-index a565989..0f15227 100644 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				---- a/src/softmagic.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+++ b/src/softmagic.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -169,6 +169,8 @@ match(struct magic_set *ms, struct magic *magic, uint32_t nmagic, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if ((e = handle_annotation(ms, m)) != 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			return e; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		 * If we are going to print something, we'll need to print 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		 * a blank before we print something else. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -176,8 +176,6 @@ match(struct magic_set *ms, struct magic *magic, uint32_t nmagic, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		if (*m->desc) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			need_separator = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			printed_something = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--			if ((e = handle_annotation(ms, m)) != 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--				return e; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			if (print_sep(ms, firstline) == -1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				return -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -252,13 +252,13 @@ match(struct magic_set *ms, struct magic *magic, uint32_t nmagic, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					ms->c.li[cont_level].got_match = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				if ((e = handle_annotation(ms, m)) != 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					return e; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				 * If we are going to print something, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				 * make sure that we have a separator first. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				if (*m->desc) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--					if ((e = handle_annotation(ms, m)) != 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--						return e; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					if (!printed_something) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 						printed_something = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 						if (print_sep(ms, firstline) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -450,7 +450,7 @@ mprint(struct magic_set *ms, struct magic *m) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				return -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			t = ms->offset + strlen(p->s); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			if (m->type == FILE_PSTRING) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--				t++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				t += file_pstring_length_size(m); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -615,7 +615,7 @@ moffset(struct magic_set *ms, struct magic *m) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				p->s[strcspn(p->s, "\n")] = '\0'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			t = CAST(uint32_t, (ms->offset + strlen(p->s))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			if (m->type == FILE_PSTRING) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--				t++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				t += file_pstring_length_size(m); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			return t; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-diff --git a/src/apprentice.c b/src/apprentice.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-index 1120a69..c77f679 100644 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				---- a/src/apprentice.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+++ b/src/apprentice.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1314,7 +1314,6 @@ parse(struct magic_set *ms, struct magic_entry **mentryp, uint32_t *nmentryp, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	m->str_range = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	m->str_flags = m->type == FILE_PSTRING ? PSTRING_1_LE : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	m->num_mask = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if ((op = get_op(*l)) != -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		if (!IS_STRING(m->type)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			uint64_t val; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2402,6 +2402,8 @@ bs1(struct magic *m) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	m->in_offset = swap4((uint32_t)m->in_offset); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	m->lineno = swap4((uint32_t)m->lineno); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (IS_STRING(m->type)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (m->type == FILE_PSTRING) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			printf("flags! %d\n", m->str_flags); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		m->str_range = swap4(m->str_range); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		m->str_flags = swap4(m->str_flags); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 |