Bug#380404: amphetamine: segfaults at end of level (amd64)
Darren Salt
linux at youmustbejoking.demon.co.uk
Sat Jul 29 22:53:53 UTC 2006
Package: amphetamine
Version: 0.8.10-10
Tags: patch
amphetamine (on amd64) segfaults on activation of a teleport object. The
cause is an assumption about the size of long and unsigned long.
--
| Darren Salt | linux or ds at | nr. Ashington, | Toon
| RISC OS, Linux | youmustbejoking,demon,co,uk | Northumberland | Army
| + Output less CO2 => avoid massive flooding. TIME IS RUNNING OUT *FAST*.
Everybody should believe in something... I believe I'll have another drink.
-------------- next part --------------
--- amphetamine-0.8.10.orig/src/Shape.cpp
+++ amphetamine-0.8.10/src/Shape.cpp
@@ -56,12 +56,12 @@
*/
#ifdef __OPT_MEM_ACCESS__
-#define GET_LONG(adr) *(unsigned long *)adr
-#define SET_LONG(adr, l) *(unsigned long *)adr = l
+#define GET_LONG(adr) *(uint32_t *)adr
+#define SET_LONG(adr, l) *(uint32_t *)adr = l
#else
-#define GET_LONG(adr) ((long)((unsigned char *)(adr))[0] << 24) + ((long)((unsigned char *)(adr))[1] << 16) + ((long)((unsigned char *)(adr))[2] << 8) + ((long)((unsigned char *)(adr))[3])
+#define GET_LONG(adr) ((uint32_t)((unsigned char *)(adr))[0] << 24) + ((uint32_t)((unsigned char *)(adr))[1] << 16) + ((uint32_t)((unsigned char *)(adr))[2] << 8) + ((uint32_t)((unsigned char *)(adr))[3])
#define SET_LONG(adr, l) ((unsigned char *)adr)[0] = (unsigned char)((l) >> 24); \
((unsigned char *)adr)[1] = (unsigned char)((l) >> 16); \
((unsigned char *)adr)[2] = (unsigned char)((l) >> 8); \
@@ -116,7 +116,7 @@
{
// store the location of this line start
lineStartPtr = destPtr;
- destPtr += sizeof( unsigned long );
+ destPtr += sizeof( uint32_t );
// at the beginning of each row we are not in any run
drawRunFlag = kFalse;
@@ -160,7 +160,7 @@
// create the skip token
//*( ( unsigned long * )destPtr ) = ( kSkipPixelsToken << 24 ) + runCounter;
SET_LONG(destPtr, ( kSkipPixelsToken << 24 ) + runCounter);
- destPtr += sizeof( unsigned long );
+ destPtr += sizeof( uint32_t );
}
// are we in a draw run
@@ -179,7 +179,7 @@
// save the location of the token (so we can fill it in later)
runTokenPtr = destPtr;
- destPtr += sizeof( unsigned long );
+ destPtr += sizeof( uint32_t );
// copy the pixel
*destPtr = *srcPtr;
@@ -215,7 +215,7 @@
// create the end of shape token
SET_LONG(destPtr, kEndShapeToken << 24);
- destPtr += sizeof( unsigned long );
+ destPtr += sizeof( uint32_t );
// Resize the handle to match the real size of the shape
//SetHandleSize( shapeHandle, destPtr - ( unsigned char * )( *shapeHandle ) );
@@ -280,7 +280,7 @@
// get a token
tokenOp = GET_LONG(srcPtr ) >> 24;
tokenData = GET_LONG(srcPtr ) & 0x00ffffff;
- srcPtr += sizeof( unsigned long );
+ srcPtr += sizeof( uint32_t );
// depending on the token
switch( tokenOp )
@@ -435,7 +435,7 @@
// get a token
tokenOp = GET_LONG(srcPtr) >> 24;
tokenData = GET_LONG(srcPtr) & 0x00ffffff;
- srcPtr += sizeof( unsigned long );
+ srcPtr += sizeof( uint32_t );
// depending on the token
switch( tokenOp )
More information about the Pkg-games-devel
mailing list