From 77b523edaad2bd6c6d6e085ca71d98eb7536f554 Mon Sep 17 00:00:00 2001 From: will Date: Wed, 29 Aug 2001 23:16:13 +0000 Subject: Add patch for kdoctools/xml2man.cpp, similar to xslt.cpp patch. Bump PORTREVISION just in case this is needed. From Mikhail Teterin: > Well, for the same reason the xslt.cpp sometimes works -- in fact, it > worked for everyone, until someone tried it on current. > > In essence, the code reads the whole file into a buffer. It then tries > to turn that buffer into one of qt's string-objects (QCString). The > class' constructor they chose assumes, it is passed a valid (aka > \0-terminated) string and goes through the buffer looking for the first > 0-byte. The file itself does not contain any, so it happily wonders > behind the real end of the buffer until it either finds a stray 0-byte, > or seg-faults, trying to read a wrong page. > > Apparently, more often than not, some stray 0-byte is there -- no > surprise. But it will usually create a string that's longer than the > file size -- unless the 0-byte happens to be right there at the end of > the buffer. Apparently, the lamer, who wrote it, noticed something > strange, so he/she explicitly truncates the created QCString object to > the known size of the file after instantiation: > > contents.truncate(xmlFile.size()) > > My patch modifies the code to use the correct QCString constructor -- > the one, that accepts the maximum size of the string. This does the > right thing -- once it reaches the end of the buffer, it stops, > allocates the private storage (I hate C++ for all this buffer copying), > appends the 0-byte and creates the object of the expected size. No > truncation is needed.... Thanks to Mikhail for his debugging on this problem; this patch further removes the hazard of meinproc coredumps. Submitted by: mi --- x11/kdelibs4/Makefile | 2 +- x11/kdelibs4/files/patch-kdoctools::xml2man.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 x11/kdelibs4/files/patch-kdoctools::xml2man.cpp (limited to 'x11/kdelibs4') diff --git a/x11/kdelibs4/Makefile b/x11/kdelibs4/Makefile index 540b32e9e15d..5765e85fda27 100644 --- a/x11/kdelibs4/Makefile +++ b/x11/kdelibs4/Makefile @@ -7,7 +7,7 @@ PORTNAME= kdelibs PORTVERSION= 2.2 -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= x11 kde MASTER_SITES= ${MASTER_SITE_KDE} MASTER_SITE_SUBDIR= stable/${PORTVERSION}/src diff --git a/x11/kdelibs4/files/patch-kdoctools::xml2man.cpp b/x11/kdelibs4/files/patch-kdoctools::xml2man.cpp new file mode 100644 index 000000000000..fb020b58532c --- /dev/null +++ b/x11/kdelibs4/files/patch-kdoctools::xml2man.cpp @@ -0,0 +1,13 @@ +--- kdoctools/xml2man.cpp Sat Jul 28 23:55:05 2001 ++++ kdoctools/xml2man.cpp.new Wed Aug 29 18:10:54 2001 +@@ -63,9 +63,7 @@ + QString pat = args->arg( 0 ); + QFile xmlFile( pat ); + xmlFile.open(IO_ReadOnly); +- QCString contents; +- contents.assign(xmlFile.readAll()); +- contents.truncate(xmlFile.size()); ++ QCString contents(xmlFile.radAll(), xmlFile.size() + 1); + xmlFile.close(); + + contents.replace( QRegExp( "" ), "" ); -- cgit