From: Michal Čihař Subject: Fix unalligned access to buffer. On several architectures (arm, armel, sparc and ia64), unalligned access to integers is not allowed. Buffer in this function is not alligned at all and attempt to read integer from it causes crash of application on such architectures. Bug: https://sourceforge.net/tracker/index.php?func=detail&aid=2149388&group_id=122858&atid=694730 --- a/src/lib/lib.cpp +++ b/src/lib/lib.cpp @@ -496,9 +496,13 @@ entries[i].keystr=p; len=strlen(p); p+=len+1; - entries[i].off=g_ntohl(*reinterpret_cast(p)); + /* + * Can not use typecasting here, because *data does not have + * to be alligned and unalligned access fails on some architectures. + */ + entries[i].off=((unsigned char)p[0] << 24) | ((unsigned char)p[1] << 16) | ((unsigned char)p[2] << 8) | (unsigned char)p[3]; p+=sizeof(guint32); - entries[i].size=g_ntohl(*reinterpret_cast(p)); + entries[i].size=((unsigned char)p[0] << 24) | ((unsigned char)p[1] << 16) | ((unsigned char)p[2] << 8) | (unsigned char)p[3]; p+=sizeof(guint32); } }