You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/app-text/sdcv/files/sdcv-0.4.2-crash.patch

28 lines
1.1 KiB

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.
Reported upstream at:
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<guint32 *>(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<guint32 *>(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);
}
}