SOURCES: file-offset.patch - official fix

arekm arekm at pld-linux.org
Sat Nov 25 19:16:46 CET 2006


Author: arekm                        Date: Sat Nov 25 18:16:46 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- official fix

---- Files affected:
SOURCES:
   file-offset.patch (1.2 -> 1.3) 

---- Diffs:

================================================================
Index: SOURCES/file-offset.patch
diff -u SOURCES/file-offset.patch:1.2 SOURCES/file-offset.patch:1.3
--- SOURCES/file-offset.patch:1.2	Sat Nov 25 00:30:30 2006
+++ SOURCES/file-offset.patch	Sat Nov 25 19:16:40 2006
@@ -1,42 +1,201 @@
-diff -urN file-4.18.org/src/apprentice.c file-4.18/src/apprentice.c
---- file-4.18.org/src/apprentice.c	2006-10-31 20:37:17.000000000 +0100
-+++ file-4.18/src/apprentice.c	2006-11-25 01:27:51.000000000 +0100
-@@ -623,7 +623,7 @@
-         }
- 
- 	/* get offset, then skip over it */
--	m->offset = (uint32_t)strtoul(l, &t, 0);
-+	m->dummy4 = m->offset = (uint32_t)strtoul(l, &t, 0);
-         if (l == t)
- 		if (ms->flags & MAGIC_CHECK)
- 			file_magwarn(ms, "offset `%s' invalid", l);
-@@ -1487,7 +1487,7 @@
- bs1(struct magic *m)
+diff -urN file-4.18.org/src/file.h file-4.18.fixed/src/file.h
+--- file-4.18.org/src/file.h	2006-10-31 21:59:39.000000000 +0100
++++ file-4.18.fixed/src/file.h	2006-11-25 18:28:54.000000000 +0100
+@@ -282,6 +282,7 @@
+ 	char *pbuf;
+ 	size_t psize;
+     } o;
++    uint32_t offset;
+     int error;
+     int flags;
+     int haderr;
+diff -urN file-4.18.org/src/softmagic.c file-4.18.fixed/src/softmagic.c
+--- file-4.18.org/src/softmagic.c	2006-10-31 20:37:17.000000000 +0100
++++ file-4.18.fixed/src/softmagic.c	2006-11-25 18:28:54.000000000 +0100
+@@ -50,7 +50,7 @@
+ private int32_t mprint(struct magic_set *, union VALUETYPE *, struct magic *);
+ private void mdebug(uint32_t, const char *, size_t);
+ private int mcopy(struct magic_set *, union VALUETYPE *, int, int,
+-    const unsigned char *, size_t, size_t);
++    const unsigned char *, uint32_t, size_t);
+ private int mconvert(struct magic_set *, union VALUETYPE *, struct magic *);
+ private int check_mem(struct magic_set *, unsigned int);
+ private int print_sep(struct magic_set *, int);
+@@ -119,6 +119,7 @@
+ 
+ 	for (magindex = 0; magindex < nmagic; magindex++) {
+ 		/* if main entry matches, print it... */
++		ms->offset = magic[magindex].offset;
+ 		int flush = !mget(ms, &p, s, &magic[magindex], nbytes,
+ 		    cont_level);
+ 		if (flush) {
+@@ -174,16 +175,16 @@
+ 				 */
+ 				cont_level = magic[magindex].cont_level;
+ 			}
+-			oldoff = magic[magindex].offset;
++			ms->offset = magic[magindex].offset;
+ 			if (magic[magindex].flag & OFFADD) {
+-				magic[magindex].offset +=
++				ms->offset +=
+ 				    ms->c.off[cont_level - 1];
+ 			}
+ 
+ 			flush = !mget(ms, &p, s, &magic[magindex], nbytes,
+ 			    cont_level);
+ 			if (flush && magic[magindex].reln != '!')
+-				goto done;
++				continue;
+ 				
+ 			switch (flush ? 1 : magiccheck(ms, &p, &magic[magindex])) {
+ 			case -1:
+@@ -228,8 +229,6 @@
+ 				if (check_mem(ms, ++cont_level) == -1)
+ 					return -1;
+ 			}
+-done:
+-			magic[magindex].offset = oldoff;
+ 		}
+ 		firstline = 0;
+ 		returnval = 1;
+@@ -304,7 +303,7 @@
+ 				return -1;
+ 			break;
+ 		}
+-		t = m->offset + sizeof(char);
++		t = ms->offset + sizeof(char);
+ 		break;
+ 
+   	case FILE_SHORT:
+@@ -325,7 +324,7 @@
+ 				return -1;
+ 			break;
+ 		}
+-		t = m->offset + sizeof(short);
++		t = ms->offset + sizeof(short);
+ 		break;
+ 
+   	case FILE_LONG:
+@@ -347,7 +346,7 @@
+ 				return -1;
+ 			break;
+ 		}
+-		t = m->offset + sizeof(int32_t);
++		t = ms->offset + sizeof(int32_t);
+   		break;
+ 
+   	case FILE_QUAD:
+@@ -356,7 +355,7 @@
+ 		v = file_signextend(ms, m, p->q);
+ 		if (file_printf(ms, m->desc, (uint64_t) v) == -1)
+ 			return -1;
+-		t = m->offset + sizeof(int64_t);
++		t = ms->offset + sizeof(int64_t);
+   		break;
+   	case FILE_STRING:
+   	case FILE_PSTRING:
+@@ -365,7 +364,7 @@
+ 		if (m->reln == '=' || m->reln == '!') {
+ 			if (file_printf(ms, m->desc, m->value.s) == -1)
+ 				return -1;
+-			t = m->offset + m->vallen;
++			t = ms->offset + m->vallen;
+ 		}
+ 		else {
+ 			if (*m->value.s == '\0') {
+@@ -375,7 +374,7 @@
+ 			}
+ 			if (file_printf(ms, m->desc, p->s) == -1)
+ 				return -1;
+-			t = m->offset + strlen(p->s);
++			t = ms->offset + strlen(p->s);
+ 		}
+ 		break;
+ 
+@@ -385,7 +384,7 @@
+ 	case FILE_MEDATE:
+ 		if (file_printf(ms, m->desc, file_fmttime(p->l, 1)) == -1)
+ 			return -1;
+-		t = m->offset + sizeof(time_t);
++		t = ms->offset + sizeof(time_t);
+ 		break;
+ 
+ 	case FILE_LDATE:
+@@ -394,7 +393,7 @@
+ 	case FILE_MELDATE:
+ 		if (file_printf(ms, m->desc, file_fmttime(p->l, 0)) == -1)
+ 			return -1;
+-		t = m->offset + sizeof(time_t);
++		t = ms->offset + sizeof(time_t);
+ 		break;
+ 
+ 	case FILE_QDATE:
+@@ -403,7 +402,7 @@
+ 		if (file_printf(ms, m->desc, file_fmttime((uint32_t)p->q, 1))
+ 		    == -1)
+ 			return -1;
+-		t = m->offset + sizeof(uint64_t);
++		t = ms->offset + sizeof(uint64_t);
+ 		break;
+ 
+ 	case FILE_QLDATE:
+@@ -412,19 +411,19 @@
+ 		if (file_printf(ms, m->desc, file_fmttime((uint32_t)p->q, 0))
+ 		    == -1)
+ 			return -1;
+-		t = m->offset + sizeof(uint64_t);
++		t = ms->offset + sizeof(uint64_t);
+ 		break;
+ 
+ 	case FILE_REGEX:
+ 	  	if (file_printf(ms, m->desc, p->s) == -1)
+ 			return -1;
+-		t = m->offset + strlen(p->s);
++		t = ms->offset + strlen(p->s);
+ 		break;
+ 
+ 	case FILE_SEARCH:
+ 	  	if (file_printf(ms, m->desc, m->value.s) == -1)
+ 			return -1;
+-		t = m->offset + m->vallen;
++		t = ms->offset + m->vallen;
+ 		break;
+ 
+ 	default:
+@@ -610,7 +609,7 @@
+ 
+ private int
+ mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir,
+-    const unsigned char *s, size_t offset, size_t nbytes)
++    const unsigned char *s, uint32_t offset, size_t nbytes)
  {
- 	m->cont_level = swap2(m->cont_level);
--	m->offset = swap4((uint32_t)m->offset);
-+	m->dummy4 = m->offset = swap4((uint32_t)m->offset);
- 	m->in_offset = swap4((uint32_t)m->in_offset);
- 	if (!IS_STRING(m->type))
- 		m->value.q = swap8(m->value.q);
-diff -urN file-4.18.org/src/funcs.c file-4.18/src/funcs.c
---- file-4.18.org/src/funcs.c	2006-10-31 20:37:17.000000000 +0100
-+++ file-4.18/src/funcs.c	2006-11-25 01:27:51.000000000 +0100
-@@ -151,10 +151,16 @@
- protected int
- file_reset(struct magic_set *ms)
+ 	if (type == FILE_REGEX && indir == 0) {
+ 		/*
+@@ -692,7 +691,7 @@
+ mget(struct magic_set *ms, union VALUETYPE *p, const unsigned char *s,
+     struct magic *m, size_t nbytes, unsigned int cont_level)
  {
-+	struct mlist *ml;
- 	if (ms->mlist == NULL) {
- 		file_error(ms, 0, "no magic files loaded");
+-	uint32_t offset = m->offset;
++	uint32_t offset = ms->offset;
+ 
+ 	if (mcopy(ms, p, m->type, m->flag & INDIR, s, offset, nbytes) == -1)
  		return -1;
- 	}
-+	for (ml = ms->mlist->next; ml != ms->mlist; ml = ml->next) {
-+		uint32_t magindex;
-+		for (magindex = 0; magindex < ml->nmagic; magindex++)
-+			ml->magic[magindex].offset = ml->magic[magindex].dummy4;
-+	}
- 	ms->o.ptr = ms->o.buf;
- 	ms->haderr = 0;
- 	ms->error = -1;
+@@ -1169,7 +1168,7 @@
+ 		if (m->flag & INDIROFFADD) offset += ms->c.off[cont_level-1];
+ 		if (mcopy(ms, p, m->type, 0, s, offset, nbytes) == -1)
+ 			return -1;
+-		m->offset = offset;
++		ms->offset = offset;
+ 
+ 		if ((ms->flags & MAGIC_DEBUG) != 0) {
+ 			mdebug(offset, (char *)(void *)p,
+@@ -1381,7 +1380,7 @@
+ 			while (len-- > 0 && (v = *b++ - *a++) == 0)
+ 				continue;
+ 			if (!v) {
+-				m->offset += range - 1;
++				ms->offset += range - 1;
+ 				break;
+ 			}
+ 			if (range + slen >= p->search.buflen)
 
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/SOURCES/file-offset.patch?r1=1.2&r2=1.3&f=u



More information about the pld-cvs-commit mailing list