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

Reply via email to