Overview
| Comment: | OFObject: Use owner as a sentinel for pre_mem. |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
ce1c7fe94097c56f3087a3af51e2ba38 |
| User & Date: | js on 2012-03-21 14:47:14 |
| Other Links: | manifest | tags |
Context
|
2012-03-21
| ||
| 15:39 | OFThreadPool: Terminate threads on deallocation. (check-in: 4ac1256458 user: js tags: trunk) | |
| 14:47 | OFObject: Use owner as a sentinel for pre_mem. (check-in: ce1c7fe940 user: js tags: trunk) | |
| 12:06 | Make use of PACKAGE_VERSION. (check-in: 7078674567 user: js tags: trunk) | |
Changes
Modified src/OFObject.m from [0df01667b3] to [708e72ca3d].
| ︙ | ︙ | |||
65 66 67 68 69 70 71 |
struct pre_mem *firstMem, *lastMem;
#if !defined(OF_ATOMIC_OPS) && defined(OF_THREADS)
of_spinlock_t retainCountSpinlock;
#endif
};
struct pre_mem {
| < > | 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
struct pre_mem *firstMem, *lastMem;
#if !defined(OF_ATOMIC_OPS) && defined(OF_THREADS)
of_spinlock_t retainCountSpinlock;
#endif
};
struct pre_mem {
struct pre_mem *prev, *next;
id owner;
};
#define PRE_IVAR_ALIGN ((sizeof(struct pre_ivar) + \
(__BIGGEST_ALIGNMENT__ - 1)) & ~(__BIGGEST_ALIGNMENT__ - 1))
#define PRE_IVAR ((struct pre_ivar*)(void*)((char*)self - PRE_IVAR_ALIGN))
#define PRE_MEM_ALIGN ((sizeof(struct pre_mem) + \
|
| ︙ | ︙ | |||
984 985 986 987 988 989 990 991 992 993 994 995 996 997 |
break;
}
iter = PRE_IVAR->firstMem;
while (iter != NULL) {
struct pre_mem *next = iter->next;
free(iter);
iter = next;
}
free((char*)self - PRE_IVAR_ALIGN);
}
| > > > > > > > | 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 |
break;
}
iter = PRE_IVAR->firstMem;
while (iter != NULL) {
struct pre_mem *next = iter->next;
/*
* We can use owner as a sentinel to prevent exploitation in
* case there is a buffer underflow somewhere.
*/
if (iter->owner != self)
abort();
free(iter);
iter = next;
}
free((char*)self - PRE_IVAR_ALIGN);
}
|
| ︙ | ︙ |