reopen 387183 ! thanks Package: ctn Version: 3.0.6-9 Tags: patch Followup-For: Bug #387183
While chasing down a rc bug in dicomnifti package I've realized that U32 size on amd64 provided by ctn is 64 bit (which is wrong). That caused valgrind to report multiple improper read/writes (writing/reading 8 bytes into 4 bytes available, etc) It seems as of now ctn is not dynamicaly figuring out the sizes, so I've decided to write a tiny C shippet which would spit out proper sizes. You can see the patch which makes ctn valgrind-happy at the end (and dicomnifti as well if it gets rebuilt properly) Please don't simply apply this patch but tune it so provided sizes are properly incorporated into dicom.h, since otherwise any tool which compiles using ctn/*.h will have no information on *SIZE variables, so it would need to define them. now windows specific dicom_platform.h sounds like a good place where to dump the values, and make it unconditionally included into dicom.h. For windows boxes (since debian doesn't get compiled there) I bet they are safe to use it as is ;-) Cheers -- System Information: Debian Release: testing/unstable APT prefers testing-proposed-updates APT policy: (500, 'testing-proposed-updates'), (500, 'testing') Architecture: amd64 (x86_64) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.16-2-amd64-generic Locale: LANG=ru_RU.KOI8-R, LC_CTYPE=ru_RU.KOI8-R (charmap=KOI8-R) Versions of packages ctn depends on: ii libc6 2.3.6.ds1-7 GNU C Library: Shared libraries ii libmysqlclient15off 5.0.30-3 mysql database client library ii libx11-6 2:1.0.3-2 X11 client-side library ii libxaw7 1:1.0.2-4 X11 Athena Widget library ii libxext6 1:1.0.1-2 X11 miscellaneous extension librar ii libxmu6 1:1.0.2-2 X11 miscellaneous utility library ii libxt6 1:1.0.2-2 X11 toolkit intrinsics library ii zlib1g 1:1.2.3-13 compression library - runtime ctn recommends no packages. -- no debconf information -- .-. =------------------------------ /v\ ----------------------------= Keep in touch // \\ (yoh@|www.)onerussian.com Yaroslav Halchenko /( )\ ICQ#: 60653192 Linux User ^^-^^ [175555]
diff -Naur ctn-3.0.6/debian/ctnmake.debian.mysql.options ctn-3.0.6.good/debian/ctnmake.debian.mysql.options --- ctn-3.0.6/debian/ctnmake.debian.mysql.options 2007-01-26 10:16:36.000000000 -0500 +++ ctn-3.0.6.good/debian/ctnmake.debian.mysql.options 2007-01-26 09:44:21.439319106 -0500 @@ -23,9 +23,6 @@ CFLAGS_MOTIF = -I$(XM_INCLUDE) #DEBUG_LIBS = -lmalloc -LONGSIZE=32 -INTSIZE=32 -SHORTSIZE=16 C_OPTS = -g -DDEBUG -D$(ARCHITECTURE) -D$(OS) -DSHARED_MEMORY \ -DSEMAPHORE -DX11 -DATHENA -DX11R4 -DUSLEEP -DMYSQLDB \ -I$(DICOM_INCLUDE) -I$(MYSQL_INCLUDE) \ diff -Naur ctn-3.0.6/debian/debian.mysql.options.env ctn-3.0.6.good/debian/debian.mysql.options.env --- ctn-3.0.6/debian/debian.mysql.options.env 2007-01-26 10:16:36.000000000 -0500 +++ ctn-3.0.6.good/debian/debian.mysql.options.env 2007-01-26 09:44:36.996802694 -0500 @@ -6,7 +6,7 @@ export DICOM_LIB=$DICOM_ROOT/lib/ctn-mysql export DICOM_LIBSRC=$DICOM_ROOT/libsrc export DICOM_INCLUDE=$DICOM_ROOT/include -export DICOM_MAKE=$DICOM_ROOT/debian/ctnmake.debian.mysql.options +export DICOM_MAKE=$DICOM_ROOT/debian/ctnmake.debian.mysql.options.full export MYSQL_LIB=/usr/lib export MYSQL_INCLUDE=/usr/include/mysql diff -Naur ctn-3.0.6/debian/make_sizes.c ctn-3.0.6.good/debian/make_sizes.c --- ctn-3.0.6/debian/make_sizes.c 1969-12-31 19:00:00.000000000 -0500 +++ ctn-3.0.6.good/debian/make_sizes.c 2007-01-26 09:52:56.732459943 -0500 @@ -0,0 +1,7 @@ +#include <stdio.h> +int main(){ + printf("LONGSIZE=%d\n", 8*sizeof(long int)); + printf("INTSIZE=%d\n", 8*sizeof(int)); + printf("SHORTSIZE=%d\n", 8*sizeof(short)); +return 0; +} diff -Naur ctn-3.0.6/debian/README.Debian ctn-3.0.6.good/debian/README.Debian --- ctn-3.0.6/debian/README.Debian 2007-01-26 10:16:36.000000000 -0500 +++ ctn-3.0.6.good/debian/README.Debian 2007-01-26 10:18:35.835303789 -0500 @@ -26,15 +26,3 @@ 4. Added man pages. - -Using CTN with other code on 64 bit platforms ---------------------------------------------- -Michael Hanke writes: -"If I got it right LONGSIZE has to be defined 32 in any code that uses -CTN no matter what the actual size of long is. - -I have some code that normally determines the size of long in a platform check -(obviously 64 on amd64). If I define LONGSIZE to match the size of long -on amd64 I get a segfault when calling CTN stuff." - - diff -Naur ctn-3.0.6/debian/rules ctn-3.0.6.good/debian/rules --- ctn-3.0.6/debian/rules 2007-01-26 10:16:36.000000000 -0500 +++ ctn-3.0.6.good/debian/rules 2007-01-26 09:44:53.266354190 -0500 @@ -15,9 +15,10 @@ build: build-stamp -build-stamp: +build-stamp: debian/make_sizes dh_testdir - + debian/make_sizes >| debian/ctnmake.debian.mysql.options.full + cat debian/ctnmake.debian.mysql.options >> debian/ctnmake.debian.mysql.options.full # Add here commands to compile the package. (. debian/debian.mysql.options.env; make install) touch build-stamp @@ -30,6 +31,7 @@ # Add here commands to clean up after the build process. -$(MAKE) clean rm -f debian/ctn*.postinst.* debian/ctn*.prerm.* + rm -f debian/ctnmake.debian.mysql.options.full debian/make_sizes rm -rf ${build} rm -f libsrc/*.c libsrc/*.h rm -f `find . -name \*.o -or -name \*.a` diff -Naur ctn-3.0.6/facilities/dicom/dicom.h ctn-3.0.6.good/facilities/dicom/dicom.h --- ctn-3.0.6/facilities/dicom/dicom.h 1999-09-23 22:53:14.000000000 -0400 +++ ctn-3.0.6.good/facilities/dicom/dicom.h 2007-01-26 09:22:39.000000000 -0500 @@ -85,14 +85,20 @@ typedef unsigned short U16; /* unsigned, 16 bit */ typedef short S16; /* signed, 16 bit */ -#if LONGSIZE == 64 && INTSIZE == 32 /* Such as an Alpha */ +/* Most if not all platforms have 8bit int but long is 64 bit + * on 64bit platforms. So it must be safe to use int for all of + * them + * + * This seems to be an echo of + * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=387183 + * */ +#if INTSIZE == 32 typedef unsigned int U32; typedef int S32; #elif LONGSIZE == 32 /* Most 32 bit workstations */ typedef unsigned long U32; typedef long S32; - #else /* Something we do not support */ /* The writers of this code assume that we can find a 32 bit integer