Adapted from https://sources.debian.net/data/main/d/doc%2B%2B/3.4.10-3.4/debian/patches/segfault_fix.patch --- doc++-3.4.10/src/McDArray.h 2000-07-30 12:40:48.000000000 +0200 +++ doc++-3.4.10/src/McDArray.h 2005-05-10 15:02:06.000000000 +0200 @@ -80,9 +80,14 @@ McDArray(const McDArray& old) : memFactor(old.memFactor), thesize(old.thesize), themax(old.themax) { - data = (T*)malloc(themax * sizeof(T)); - if(thesize) - memcpy(data, old.data, thesize * sizeof(T)); + if (themax) + { + data = (T*)malloc(themax * sizeof(T)); + if(thesize) + memcpy(data, old.data, thesize * sizeof(T)); + } + else + data = 0; assert(isConsistent()); } --- doc++-3.4.10/src/McDirectory.cc 2000-03-14 22:17:36.000000000 +0100 +++ doc++-3.4.10/src/McDirectory.cc 2005-05-10 15:02:18.000000000 +0200 @@ -23,12 +23,13 @@ */ #include "McDirectory.h" -#include "McSorter.h" #include "McString.h" #include "doc.h" #include <stdio.h> +#include <algorithm> + #ifdef WIN32 #include <windows.h> #ifdef __BORLANDC__ @@ -62,7 +63,7 @@ FindClose(searchHandle); StringCompare comp; if(list.size()) - sort((char **)list, list.size(), comp, 0); + std::sort((char **)list, (char **)list + list.size(), comp); return 0; } @@ -107,7 +108,7 @@ closedir(dir); StringCompare comp; if(list.size()) - sort((char **)list, list.size(), comp, 0); + std::sort((char **)list, (char **)list + list.size(), comp); return list.size(); } --- doc++-3.4.10/src/McDirectory.h 2000-06-28 21:54:58.000000000 +0200 +++ doc++-3.4.10/src/McDirectory.h 2005-05-10 15:02:18.000000000 +0200 @@ -59,9 +59,9 @@ class StringCompare { public: - int operator()(const char *t1, const char *t2) + bool operator()(const char *t1, const char *t2) { - return strcmp(t1, t2); + return strcmp(t1, t2) < 0; } }; }; --- doc++-3.4.10/src/html.cc 2001-02-17 07:34:49.000000000 +0100 +++ doc++-3.4.10/src/html.cc 2005-05-10 15:02:18.000000000 +0200 @@ -38,9 +38,10 @@ #include <sys/stat.h> #include <sys/types.h> +#include <algorithm> + #include "McDirectory.h" #include "McHashTable.h" -#include "McSorter.h" #include "classgraph.h" #include "doc.h" #include "gifs.h" @@ -314,9 +315,11 @@ virtual void writeMember(Entry *e, bool links, bool withSub = true); class EntryCompare { public: - int operator()(const MemberWriterListEntry& l1, const MemberWriterListEntry& l2) + bool operator()(const MemberWriterListEntry& l1, const MemberWriterListEntry& l2) { - return strcmp(l1.entry->fullName.c_str(), l2.entry->fullName.c_str()); + const char *s1 = l1.entry->fullName.c_str(); + const char *s2 = l2.entry->fullName.c_str(); + return strcmp(s1, s2) < 0; } }; public: @@ -324,7 +327,7 @@ { EntryCompare comp; if(list.size()) - ::sort((MemberWriterListEntry *)list, list.size(), comp, 0); + std::sort((MemberWriterListEntry *)list, (MemberWriterListEntry *)list + list.size(), comp); } virtual void startList(FILE *f, char *heading, bool withLinks); virtual void addMember(Entry *e, bool links, bool withSub = true) @@ -376,7 +379,7 @@ int lp; if(list.size() > 1) - ::sort((TOCListEntry *)list, list.size(), comp, 0); + std::sort((TOCListEntry *)list, (TOCListEntry *)list + list.size(), comp); // Sort subsections for(lp = 0; lp < list.size(); lp++) @@ -385,9 +388,9 @@ } class EntryCompare { public: - int operator()(TOCListEntry& l1, TOCListEntry& l2) + bool operator()(const TOCListEntry& l1, const TOCListEntry& l2) { - return strcmp(l1.name, l2.name); + return strcmp(l1.name, l2.name) < 0; } }; void addEntry(Entry *entry, TOClist *tl); @@ -487,7 +490,7 @@ for(i = 0; i < list.size(); i++) if(list[i].tl) - free(list[i].tl); + delete list[i].tl; } class HIERlist; @@ -509,7 +512,7 @@ int i; if(list.size() > 1) - ::sort((HIERListEntry *)list, list.size(), comp, 0); + std::sort((HIERListEntry *)list, (HIERListEntry *)list + list.size(), comp); // Sort subentries for(i = 0; i < list.size(); i++) @@ -519,9 +522,9 @@ class EntryCompare { public: - int operator()(HIERListEntry& l1, HIERListEntry& l2) + bool operator()(const HIERListEntry& l1, const HIERListEntry& l2) { - return strcmp(l1.name, l2.name); + return strcmp(l1.name, l2.name) < 0; } }; void addEntry(Entry *entry, HIERlist *hl); --- doc++-3.4.10/src/readfiles.ll 2001-11-25 18:04:48.000000000 +0100 +++ doc++-3.4.10/src/readfiles.ll 2005-05-10 15:02:18.000000000 +0200 @@ -28,7 +28,6 @@ #include <sys/types.h> #include "McDirectory.h" -#include "McSorter.h" #include "McString.h" #include "doc.h" #include "nametable.h"