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 <[email protected]> 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 <[email protected]> * 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 _______________________________________________ Pkg-games-commits mailing list [email protected] http://lists.alioth.debian.org/mailman/listinfo/pkg-games-commits

