Package: asylum Version: 0.3.2-1 Tags: patch I tried to debug the segfault I get sometime at the end of the second level. This is what I found. two buffer overruns... a stale FILE*... Perhaps there's more... Did not get to finish the second level yet...
The keyword[12] and FILE* was found using cppcheck. The *spaceptr= was flagged by dmalloc: [...] 1431426941: 40000: process pid = 4165 1431426941: 40000: error details: checking user pointer 1431426941: 40000: pointer '0xb5b9e008' from 'unknown' prev access 'file.c:145' 1431426941: 40000: dump of proper fence-top bytes: 'i\336\312\372' 1431426941: 40000: dump of '0xb5b9e008'+28480: '\022\013\'\000\022\f\'\000\022\r\'\000\022\016\'\000\377\336\312\372' 1431426941: 40000: next pointer '0xb5ba5000' (size 19657) may have run under from 'file.c:145' 1431426941: 40000: ERROR: _dmalloc_chunk_heap_check: failed OVER picket-fence magic-number check (err 27) [...] please apply the patch
diff -uprN ./asylum_orig/asylum.c ./asylum-0.3.2/asylum.c --- ./asylum_orig/asylum.c 2009-08-03 00:21:07.000000000 +0200 +++ ./asylum-0.3.2/asylum.c 2015-05-12 11:09:27.000000000 +0200 @@ -665,7 +665,7 @@ char idpermitstring[] = "You are now per void loadconfig() { - char keyword[12]; + char keyword[13]; FILE* r0 = find_config(0x40); // read access if (r0 != NULL) diff -uprN ./asylum_orig/file.c ./asylum-0.3.2/file.c --- ./asylum_orig/file.c 2008-12-10 05:12:29.000000000 +0100 +++ ./asylum-0.3.2/file.c 2015-05-12 14:18:36.000000000 +0200 @@ -142,7 +142,7 @@ int loadvitalfile(char** spaceptr, char* strcat(fullname, r1); int r4 = swi_osfile(15, fullname, 0, 0); if (r4 <= 0) fatalfile(); - *spaceptr = (char*)malloc(r4); + *spaceptr = (char*)malloc(r4+1); if (swi_osfile(14, fullname, *spaceptr, 0)) fatalfile(); return r4; } @@ -362,7 +362,11 @@ int swi_blitz_hammerop(int op, char* nam fclose(f); return op; } // file is not Hammered - if (op == 0) return 0x24000; // hack: should return length + if (op == 0) + { + fclose(f); + return 0x024000; // hack: should return length + } char a[524288]; int p = 0; char c;