Overview
Comment: | Randomize hashes.
This prevents DoSing hashtables by creating conflicts deliberately. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
f60e4012b7a099f0c724219d82e77a29 |
User & Date: | js on 2012-12-04 09:19:58 |
Other Links: | manifest | tags |
Context
2012-12-04
| ||
09:59 | Add a per-hashtable seed. check-in: 590fa6ed79 user: js tags: trunk | |
09:19 | Randomize hashes. check-in: f60e4012b7 user: js tags: trunk | |
2012-12-03
| ||
01:17 | OFXMLParser: Add configurable depth limit. check-in: ed4e64fd32 user: js tags: trunk | |
Changes
Modified configure.ac from [f33cdcae46] to [a9440db0fe].
︙ | |||
393 394 395 396 397 398 399 400 401 402 403 404 405 406 | 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 | + + + + + + + + | ac_cv_snprintf_useful_ret="no" ]) ]) AC_MSG_RESULT($ac_cv_snprintf_useful_ret) ]) test x"$have_asprintf" != x"yes" -a x"$ac_cv_snprintf_useful_ret" != x"yes" && \ AC_MSG_ERROR(No asprintf and no snprintf returning required space!) AC_CHECK_FUNC(arc4random, [ AC_DEFINE(OF_HAVE_ARC4RANDOM, 1, [Whether we have arc4random()]) ], [ AC_CHECK_FUNC(random, [ AC_DEFINE(OF_HAVE_RANDOM, 1, [Whether we have random()]) ]) ]) AC_CHECK_LIB(dl, dlopen, LIBS="$LIBS -ldl") AC_ARG_ENABLE(threads, AS_HELP_STRING([--disable-threads], [disable thread support])) AS_IF([test x"$enable_threads" != x"no"], [ case "$host_os" in |
︙ |
Modified src/OFObject.h from [710d8a991e] to [c663f1ca8f].
︙ | |||
871 872 873 874 875 876 877 878 879 | 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 | + + - - + | @end #import "OFObject+Serialization.h" #ifdef __cplusplus extern "C" { #endif extern id of_alloc_object(Class class_, size_t extraSize, size_t extraAlignment, void **extra); extern size_t of_pagesize; extern size_t of_num_cpus; |
Modified src/OFObject.m from [2f06cacc09] to [df05949c71].
︙ | |||
22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | + + | #include <stdlib.h> #include <string.h> #include <unistd.h> #include <assert.h> #include <sys/time.h> #ifdef __QNX__ # include <sys/syspage.h> #endif #import "OFObject.h" #import "OFTimer.h" #import "OFThread.h" |
︙ | |||
95 96 97 98 99 100 101 102 103 104 105 106 107 108 | 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | + | static struct { Class isa; } alloc_failed_exception; size_t of_pagesize; size_t of_num_cpus; uint32_t of_hash_seed; #if !defined(OF_APPLE_RUNTIME) || defined(__OBJC2__) static void uncaught_exception_handler(id exception) { fprintf(stderr, "\nRuntime error: Unhandled exception:\n%s\n", [[exception description] UTF8String]); |
︙ | |||
271 272 273 274 275 276 277 278 279 280 281 282 283 284 | 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 | + + + + + + + + + + + + + + | # endif of_pagesize = 4096; # ifdef _SC_NPROCESSORS_CONF if ((of_num_cpus = sysconf(_SC_NPROCESSORS_CONF)) < 1) # endif of_num_cpus = 1; #endif #if defined(OF_HAVE_ARC4RANDOM) of_hash_seed = arc4random(); #elif defined(OF_HAVE_RANDOM) struct timeval t; gettimeofday(&t, NULL); srandom(t.tv_usec); of_hash_seed = random(); #else struct timeval t; gettimeofday(&t, NULL); srand(t.tv_usec); of_hash_seed = rand(); #endif } + (void)initialize { } + alloc |
︙ |
Modified src/macros.h from [f956fa931a] to [419a2f32d2].
︙ | |||
322 323 324 325 326 327 328 | 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 | - + | # define OF_IOS #endif #define OF_ROL(value, bits) \ (((value) << ((bits) % (sizeof(value) * 8))) | \ (value) >> (sizeof(value) * 8 - ((bits) % (sizeof(value) * 8)))) |
︙ |
Modified tests/TestsAppDelegate.m from [e7f245ce3b] to [cbb72ed2a0].
︙ | |||
25 26 27 28 29 30 31 | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | + + + + + - + + + | #ifdef _PSP # include <pspmoduleinfo.h> # include <pspkernel.h> # include <pspdebug.h> PSP_MODULE_INFO("ObjFW Tests", 0, 0, 0); #endif int main(int argc, char *argv[]) { /* We need deterministic hashes for tests */ of_hash_seed = 0; |
︙ |