Package: xulrunner
Version: 1.9~rc1
Severity: normal
User: [EMAIL PROTECTED]
Usertags: patch
There is an unaligned word access bug in
toolkit/components/url-classifier/src/nsUrlClassifierDBService.cpp line 2024
where a char pointer is cast to an int pointer and accessed. On arm
and armel by default this silently gives junk values. On other
architectures it will cause a bus faults.
Fortunately the fix is trivial and local, though there are probably
more mozilla- o C++-like ways to reimplement this before sending it
upstream.
---
xulrunner-1.9~rc1.orig/toolkit/components/url-classifier/src/nsUrlClassifierDBService.cpp
2008-05-07 21:33:45.000000000 +0100
+++
xulrunner-1.9~rc1/toolkit/components/url-classifier/src/nsUrlClassifierDBService.cpp
2008-06-01 13:24:06.000000000 +0100
@@ -2020,8 +2020,20 @@
return NS_ERROR_FAILURE;
}
const nsCSubstring& str = Substring(chunk, start, 4);
+#if 0
+ // You can't just cast a char* to an int* and access through it
const PRUint32 *p = reinterpret_cast<const
PRUint32*>(str.BeginReading());
entry->mAddChunkId = PR_ntohl(*p);
+#else
+ // the old-school way...
+ union {
+ PRUint32 i;
+ char c[4];
+ } u;
+
+ memcpy(u.c, reinterpret_cast<const void *>(str.BeginReading()), 4);
+ entry->mAddChunkId = PR_ntohl(u.i);
+#endif
if (entry->mAddChunkId == 0) {
NS_WARNING("Received invalid chunk number.");
return NS_ERROR_FAILURE;