summaryrefslogtreecommitdiff
path: root/gnu/packages/patches/doc++-segfault-fix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches/doc++-segfault-fix.patch')
-rw-r--r--gnu/packages/patches/doc++-segfault-fix.patch169
1 files changed, 169 insertions, 0 deletions
diff --git a/gnu/packages/patches/doc++-segfault-fix.patch b/gnu/packages/patches/doc++-segfault-fix.patch
new file mode 100644
index 0000000000..bad34c814e
--- /dev/null
+++ b/gnu/packages/patches/doc++-segfault-fix.patch
@@ -0,0 +1,169 @@
+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"