The types used in FriBidi are incorrect when used on a 64 bit machine, long is
used for 32 bits and is 64 bits on 64 bit machines.
This bug was found when compiling geresh against fribidi on ia64 and alpha
machines in the Debian archive.
Created attachment 1187 [details] [review]
Use standard types that will work across platforms
The best course of action to solve the bug is to use standard types that have
specific size such as uint32_t, this will put the burden of making sure it is
correct on others, namely glibc.
This bug makes abiword crash on amd64. Please fix it.
Sorry for that. I'll try to roll up a fix on 0.10 branch before weekend.
Is there any news on that bug? We (abiword team) are currently preparing a new
major release (about 1 month off). It would be very good if we could depend on a
new release of fribidi which includes this fix.
Good point. I'm actually working on a new release on the stable branch that you
guys are using. Updating to Unicode 4.1 and backporting lots of stuff from
developmental... Will roll a tarball for testing this week surely. Moreover,
if you guys can make Windows DLLs, I would be happy to host them. I once
promised to try to build DLLs, but I don't have any access to a Windows machine
Ok, we are almost there. Would you guys take some time to test:
A final release would be out in a few hours.
In 0.10.5 already.
This bug still exists in 0.10.6 and above, hence I am reopening it.
I assume the changes, as suggested in the patch [attached below], have been
rolled back in 0.10.6 and above. It is causing AbiWord to crash when build
against fribidi 0.10.7. So, kindly look into this issue.
Thanks in advance.
Are you cross-compiling?
What's the contents of fribidi_config.h? 0.10.7 really cannot get it wrong.
This is the relevant part of fribidi_types.h:
#define FRIBIDI_INT8 char
#if FRIBIDI_SIZEOF_INT+0 == 2
# define FRIBIDI_INT16 int
#elif FRIBIDI_SIZEOF_SHORT+0 == 2
# define FRIBIDI_INT16 short
# error cannot determine a 16-bit integer type. check fribidi_config.h
#if FRIBIDI_SIZEOF_INT+0 == 4
# define FRIBIDI_INT32 int
#elif FRIBIDI_SIZEOF_LONG+0 == 4
# define FRIBIDI_INT32 long
# error cannot determine a 32-bit integer type. check fribidi_config.h
typedef unsigned FRIBIDI_INT32 fribidi_uint32;
typedef fribidi_uint32 FriBidiChar;
Do you still experience this issue with newer soft?
Please check the status of your issue.
I no longer maintain the debian package and my personal machine is 32bits these days so I have no way to check. Feel free to close if you think it is fixed.