r11282 - in packages/trunk/openarena-data/debian: . source

Simon McVittie smcv at alioth.debian.org
Tue Aug 24 19:17:19 UTC 2010


Author: smcv
Date: 2010-08-24 19:17:03 +0000 (Tue, 24 Aug 2010)
New Revision: 11282

Added:
   packages/trunk/openarena-data/debian/mp-pak0-449831c5.qvm
   packages/trunk/openarena-data/debian/mp-pak0-73428e1b.qvm
   packages/trunk/openarena-data/debian/mp-pak0-c8703d61.qvm
   packages/trunk/openarena-data/debian/pak0-37554497.qvm
   packages/trunk/openarena-data/debian/pak0-b2b99e5d.qvm
   packages/trunk/openarena-data/debian/pak0-d2225dd5.qvm
   packages/trunk/openarena-data/debian/pak6-patch085-087acd9c.qvm
   packages/trunk/openarena-data/debian/pak6-patch085-438cf2c5.qvm
   packages/trunk/openarena-data/debian/pak6-patch085-6602cd55.qvm
Removed:
   packages/trunk/openarena-data/debian/087acd9c.qvm
   packages/trunk/openarena-data/debian/37554497.qvm
   packages/trunk/openarena-data/debian/438cf2c5.qvm
   packages/trunk/openarena-data/debian/449831c5.qvm
   packages/trunk/openarena-data/debian/6602cd55.qvm
   packages/trunk/openarena-data/debian/73428e1b.qvm
   packages/trunk/openarena-data/debian/b2b99e5d.qvm
   packages/trunk/openarena-data/debian/c8703d61.qvm
   packages/trunk/openarena-data/debian/d2225dd5.qvm
Modified:
   packages/trunk/openarena-data/debian/changelog
   packages/trunk/openarena-data/debian/qvmbrute.c
   packages/trunk/openarena-data/debian/rules
   packages/trunk/openarena-data/debian/source/include-binaries
Log:
Encode a search prefix into the fake QVM files so we can load different
native code; OA 0.8.1 and 0.8.5 turn out not to be network-compatible.
(When combined with changes to openarena, this will close #592965)

Deleted: packages/trunk/openarena-data/debian/087acd9c.qvm
===================================================================
(Binary files differ)

Deleted: packages/trunk/openarena-data/debian/37554497.qvm
===================================================================
(Binary files differ)

Deleted: packages/trunk/openarena-data/debian/438cf2c5.qvm
===================================================================
(Binary files differ)

Deleted: packages/trunk/openarena-data/debian/449831c5.qvm
===================================================================
(Binary files differ)

Deleted: packages/trunk/openarena-data/debian/6602cd55.qvm
===================================================================
(Binary files differ)

Deleted: packages/trunk/openarena-data/debian/73428e1b.qvm
===================================================================
(Binary files differ)

Deleted: packages/trunk/openarena-data/debian/b2b99e5d.qvm
===================================================================
(Binary files differ)

Deleted: packages/trunk/openarena-data/debian/c8703d61.qvm
===================================================================
(Binary files differ)

Modified: packages/trunk/openarena-data/debian/changelog
===================================================================
--- packages/trunk/openarena-data/debian/changelog	2010-08-24 00:58:41 UTC (rev 11281)
+++ packages/trunk/openarena-data/debian/changelog	2010-08-24 19:17:03 UTC (rev 11282)
@@ -1,3 +1,11 @@
+openarena-data (0.8.5-3) unstable; urgency=low
+
+  * Encode a search prefix into the fake QVM files so we can load different
+    native code; OA 0.8.1 and 0.8.5 turn out not to be network-compatible.
+    (When combined with changes to openarena, this will close #592965)
+
+ -- Simon McVittie <smcv at debian.org>  Tue, 24 Aug 2010 20:16:33 +0100
+
 openarena-data (0.8.5-2) unstable; urgency=low
 
   * Include directory entries explicitly in the repacked PK3 files, so the

Deleted: packages/trunk/openarena-data/debian/d2225dd5.qvm
===================================================================
(Binary files differ)

Added: packages/trunk/openarena-data/debian/mp-pak0-449831c5.qvm
===================================================================
(Binary files differ)


Property changes on: packages/trunk/openarena-data/debian/mp-pak0-449831c5.qvm
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: packages/trunk/openarena-data/debian/mp-pak0-73428e1b.qvm
===================================================================
(Binary files differ)


Property changes on: packages/trunk/openarena-data/debian/mp-pak0-73428e1b.qvm
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: packages/trunk/openarena-data/debian/mp-pak0-c8703d61.qvm
===================================================================
(Binary files differ)


Property changes on: packages/trunk/openarena-data/debian/mp-pak0-c8703d61.qvm
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: packages/trunk/openarena-data/debian/pak0-37554497.qvm
===================================================================
(Binary files differ)


Property changes on: packages/trunk/openarena-data/debian/pak0-37554497.qvm
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: packages/trunk/openarena-data/debian/pak0-b2b99e5d.qvm
===================================================================
(Binary files differ)


Property changes on: packages/trunk/openarena-data/debian/pak0-b2b99e5d.qvm
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: packages/trunk/openarena-data/debian/pak0-d2225dd5.qvm
===================================================================
(Binary files differ)


Property changes on: packages/trunk/openarena-data/debian/pak0-d2225dd5.qvm
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: packages/trunk/openarena-data/debian/pak6-patch085-087acd9c.qvm
===================================================================
(Binary files differ)


Property changes on: packages/trunk/openarena-data/debian/pak6-patch085-087acd9c.qvm
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: packages/trunk/openarena-data/debian/pak6-patch085-438cf2c5.qvm
===================================================================
(Binary files differ)


Property changes on: packages/trunk/openarena-data/debian/pak6-patch085-438cf2c5.qvm
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: packages/trunk/openarena-data/debian/pak6-patch085-6602cd55.qvm
===================================================================
(Binary files differ)


Property changes on: packages/trunk/openarena-data/debian/pak6-patch085-6602cd55.qvm
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Modified: packages/trunk/openarena-data/debian/qvmbrute.c
===================================================================
--- packages/trunk/openarena-data/debian/qvmbrute.c	2010-08-24 00:58:41 UTC (rev 11281)
+++ packages/trunk/openarena-data/debian/qvmbrute.c	2010-08-24 19:17:03 UTC (rev 11282)
@@ -1,5 +1,7 @@
 /* Attempt to find CRC-32 collisions for QVM files.
  *
+ * Usage: qvmbrute.c DESIRED-CRC [OUTPUT-FILENAME [SUBDIRECTORY]]
+ *
  * Copyright 2010 Simon McVittie <smcv at debian.org>
  * Copying and distribution of this file, with or without modification, are
  * permitted in any medium without royalty provided this notice is preserved.
@@ -19,21 +21,40 @@
 main (int argc, char **argv)
 {
 	u_int32_t i;
-	unsigned char qvm[] = { 'N', 'T', 'V', 'E', 0, 0, 0, 0,
-		'c', 'c', 'c', 'c', 'x', 'x', 'x', 'x' };
+	unsigned char qvm[1024] = { 0 };
 	u_int32_t target = strtoul (argv[1], NULL, 0);
+	char *subdir = "";
+	size_t fixed_len;
 	u_int32_t crc;
 
-	/* calculate CRC of first 8 bytes */
-	crc = crc32 (crc32 (0, NULL, 0), qvm, 8);
+	/* subdirectory to embed in the dummy file */
+	if (argc > 3) {
+		subdir = argv[3];
+	}
+
+	/* length of fixed part */
+	fixed_len = strlen (subdir) + 8;
+
+	/* The fixed part is "NTVE" + subdir + four reserved '\0' bytes
+	 * (the first of which acts as '\0' termination for subdir).
+	 *
+	 * CCCC is replaced by the complement of the CRC-32 of the fixed part,
+	 * yielding crc32 (fixed part + CCCC) = FFFFFFFF.
+	 * XXXX is replaced by a brute-forced number such that
+	 * crc32 (fixed part + CCCC + XXXX) is as desired. */
+	snprintf ((char *) qvm, sizeof (qvm) - 1, "NTVE%s%c%c%c%cCCCCXXXX",
+			subdir, 0, 0, 0, 0);
+
+	/* calculate CRC of first fixed_len bytes */
+	crc = crc32 (crc32 (0, NULL, 0), qvm, fixed_len);
 	/* put the complement of it, in little-endian, in the next 4 */
-	qvm[8] = ~(crc & 0xFF);
-	qvm[9] = ~((crc >> 8) & 0xFF);
-	qvm[10] = ~((crc >> 16) & 0xFF);
-	qvm[11] = ~((crc >> 24) & 0xFF);
-	/* by mathematical properties of CRC32, the CRC of those 12 bytes is
+	qvm[fixed_len + 0] = ~(crc & 0xFF);
+	qvm[fixed_len + 1] = ~((crc >> 8) & 0xFF);
+	qvm[fixed_len + 2] = ~((crc >> 16) & 0xFF);
+	qvm[fixed_len + 3] = ~((crc >> 24) & 0xFF);
+	/* by mathematical properties of CRC32, the CRC up to that point is
 	 * 0xFFFFFFFF */
-	crc = crc32 (crc32 (0, NULL, 0), qvm, 12);
+	crc = crc32 (crc32 (0, NULL, 0), qvm, fixed_len + 4);
 	assert (crc == 0xFFFFFFFF);
 
 	/* it's possible to do the last bit by mathematics, but brute force
@@ -59,13 +80,14 @@
 	}
 
 	/* check our working */
-	memcpy (qvm + 12, &i, 4);
-	crc = crc32 (crc32 (0, NULL, 0), qvm, 16);
+	memcpy (qvm + fixed_len + 4, &i, 4);
+	crc = crc32 (crc32 (0, NULL, 0), qvm, fixed_len + 8);
 	assert (crc == target);
 
-	printf ("crc32(\"NTVE\" 00000000 %.8x %.8x) == 0x%.8x\n",
-			ntohl(*((u_int32_t *) (qvm + 8))),
-			ntohl(*((u_int32_t *) (qvm + 12))),
+	printf ("crc32(\"NTVE%s\" 00000000 %.8x %.8x) == 0x%.8x\n",
+			subdir,
+			ntohl(*((u_int32_t *) (qvm + fixed_len))),
+			ntohl(*((u_int32_t *) (qvm + fixed_len + 4))),
 			crc);
 
 	if (argc > 2) {
@@ -75,7 +97,7 @@
 		f = fopen (argv[2], "w");
 
 		if (f == NULL ||
-				fwrite (qvm, 16, 1, f) < 1 ||
+				fwrite (qvm, fixed_len + 8, 1, f) < 1 ||
 				fclose (f) < 0) {
 			perror ("writing fake QVM");
 			return 1;

Modified: packages/trunk/openarena-data/debian/rules
===================================================================
--- packages/trunk/openarena-data/debian/rules	2010-08-24 00:58:41 UTC (rev 11281)
+++ packages/trunk/openarena-data/debian/rules	2010-08-24 19:17:03 UTC (rev 11282)
@@ -12,12 +12,13 @@
 	set -e && \
 	cd debian && for c in baseoa/*.contents missionpack/*.contents; do \
 		pk3=$${c%.contents}; \
+		prefix=$$(basename $${pk3%.pk3}); \
 		dir=$${pk3%.pk3}; \
 		echo "adding any missing fake QVM files for $$c"; \
 		sed -n -e 's/#.*//; /\.qvm$$/p;' < $$c | \
 			while read crc filename; do \
-				test -f $$crc.qvm || $(MAKE) -C .. -f debian/rules debian/$$crc.qvm; \
-				cp $$crc.qvm ../$$dir/$$filename; \
+				test -f $$prefix-$$crc.qvm || $(MAKE) -C .. -f debian/rules QVMPREFIX=$$prefix QVMCRC=$$crc debian/$$prefix-$$crc.qvm; \
+				cp $$prefix-$$crc.qvm ../$$dir/$$filename; \
 			done; \
 		echo "compressing $$dir to $$pk3"; \
 		rm -f ../$$pk3; \
@@ -29,8 +30,8 @@
 
 DEB_BUILD_GNU_TYPE := $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
 
-debian/%.qvm: debian/qvmbrute
-	./debian/qvmbrute 0x$* $@
+debian/$(QVMPREFIX)-$(QVMCRC).qvm: debian/qvmbrute
+	./debian/qvmbrute 0x$(QVMCRC) $@ $(QVMPREFIX)
 
 debian/qvmbrute: debian/qvmbrute.c
 	$(DEB_BUILD_GNU_TYPE)-gcc -Wall -lz -o debian/qvmbrute debian/qvmbrute.c

Modified: packages/trunk/openarena-data/debian/source/include-binaries
===================================================================
--- packages/trunk/openarena-data/debian/source/include-binaries	2010-08-24 00:58:41 UTC (rev 11281)
+++ packages/trunk/openarena-data/debian/source/include-binaries	2010-08-24 19:17:03 UTC (rev 11282)
@@ -1,9 +1,9 @@
-debian/087acd9c.qvm
-debian/37554497.qvm
-debian/438cf2c5.qvm
-debian/449831c5.qvm
-debian/6602cd55.qvm
-debian/73428e1b.qvm
-debian/b2b99e5d.qvm
-debian/c8703d61.qvm
-debian/d2225dd5.qvm
+debian/mp-pak0-449831c5.qvm
+debian/mp-pak0-73428e1b.qvm
+debian/mp-pak0-c8703d61.qvm
+debian/pak0-37554497.qvm
+debian/pak0-b2b99e5d.qvm
+debian/pak0-d2225dd5.qvm
+debian/pak6-patch085-087acd9c.qvm
+debian/pak6-patch085-438cf2c5.qvm
+debian/pak6-patch085-6602cd55.qvm




More information about the Pkg-games-commits mailing list