Module Name:    src
Committed By:   dholland
Date:           Sat Jan  7 18:08:35 UTC 2012

Modified Files:
        src/games/adventure: crc.c

Log Message:
Make this not crash on machines that are (a) 64 bit, or (b) have signed
chars by default (i.e., almost all machines). Makes it possible to save
the game. This has been broken since 4.4 and probably ever since the
FORTRAN -> C translation.

Crash reported by Petri Laakso in private mail.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/games/adventure/crc.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/games/adventure/crc.c
diff -u src/games/adventure/crc.c:1.11 src/games/adventure/crc.c:1.12
--- src/games/adventure/crc.c:1.11	Tue Aug 25 06:04:17 2009
+++ src/games/adventure/crc.c	Sat Jan  7 18:08:35 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: crc.c,v 1.11 2009/08/25 06:04:17 dholland Exp $	*/
+/*	$NetBSD: crc.c,v 1.12 2012/01/07 18:08:35 dholland Exp $	*/
 
 /*-
  * Copyright (c) 1993
@@ -38,7 +38,7 @@
 static char sccsid[] = "@(#)crc.c	8.1 (Berkeley) 5/31/93";
 static char ORIGINAL_sccsid[] = "@(#)crc.c	5.2 (Berkeley) 4/4/91";
 #else
-__RCSID("$NetBSD: crc.c,v 1.11 2009/08/25 06:04:17 dholland Exp $");
+__RCSID("$NetBSD: crc.c,v 1.12 2012/01/07 18:08:35 dholland Exp $");
 #endif
 #endif /* not lint */
 
@@ -124,13 +124,8 @@ crc(const char *ptr, int nr)
 
 	while (nr > 0)
 		for (p = ptr; nr--; ++p) {
-			/*
-			 * The following is not portable to machines
-			 * where char is unsigned, because of sign
-			 * extension. But it can't be changed without
-			 * breaking save files. Sigh.
-			 */
-			if (!(i = crcval >> 24 ^ *p)) {
+			i = (crcval >> 24 ^ (unsigned char)*p) & 0xff;
+			if (i == 0) {
 				i = step++;
 				if (step >= sizeof(crctab) / sizeof(crctab[0]))
 					step = 0;

Reply via email to