From 8b8af6b6d348f3cd662869a38af7f0fd4e06e5cd Mon Sep 17 00:00:00 2001 From: agc Date: Fri, 13 Aug 2004 13:05:04 +0000 Subject: Pullup ticket 102 to the pkgsrc-2004Q2 branch, requested by Mark Davies Security fix for kdelibs3 Module Name: pkgsrc Committed By: markd Date: Wed Aug 11 13:51:14 UTC 2004 Modified Files: pkgsrc/x11/kdelibs3: Makefile distinfo pkgsrc/x11/kdelibs3/patches: patch-an Added Files: pkgsrc/x11/kdelibs3/patches: patch-ap patch-aq patch-ar patch-as patch-at patch-au patch-av patch-aw patch-ax patch-ay Log Message: Fix some issues related to html frames, cookie handling and temporary filenames. From KDE cvs. Bump PKGREVISION. --- doc/CHANGES-pkgsrc-2004Q2 | 5 +- x11/kdelibs3/Makefile | 3 +- x11/kdelibs3/distinfo | 14 ++- x11/kdelibs3/patches/patch-an | 32 ++++- x11/kdelibs3/patches/patch-ap | 187 +++++++++++++++++++++++++++++ x11/kdelibs3/patches/patch-aq | 72 +++++++++++ x11/kdelibs3/patches/patch-ar | 37 ++++++ x11/kdelibs3/patches/patch-as | 37 ++++++ x11/kdelibs3/patches/patch-at | 29 +++++ x11/kdelibs3/patches/patch-au | 19 +++ x11/kdelibs3/patches/patch-av | 272 ++++++++++++++++++++++++++++++++++++++++++ x11/kdelibs3/patches/patch-aw | 52 ++++++++ x11/kdelibs3/patches/patch-ax | 27 +++++ x11/kdelibs3/patches/patch-ay | 47 ++++++++ 14 files changed, 827 insertions(+), 6 deletions(-) create mode 100644 x11/kdelibs3/patches/patch-ap create mode 100644 x11/kdelibs3/patches/patch-aq create mode 100644 x11/kdelibs3/patches/patch-ar create mode 100644 x11/kdelibs3/patches/patch-as create mode 100644 x11/kdelibs3/patches/patch-at create mode 100644 x11/kdelibs3/patches/patch-au create mode 100644 x11/kdelibs3/patches/patch-av create mode 100644 x11/kdelibs3/patches/patch-aw create mode 100644 x11/kdelibs3/patches/patch-ax create mode 100644 x11/kdelibs3/patches/patch-ay diff --git a/doc/CHANGES-pkgsrc-2004Q2 b/doc/CHANGES-pkgsrc-2004Q2 index 39377e7f56e..e1489153995 100644 --- a/doc/CHANGES-pkgsrc-2004Q2 +++ b/doc/CHANGES-pkgsrc-2004Q2 @@ -1,4 +1,4 @@ -$NetBSD: CHANGES-pkgsrc-2004Q2,v 1.1.2.54 2004/07/30 18:32:20 agc Exp $ +$NetBSD: CHANGES-pkgsrc-2004Q2,v 1.1.2.55 2004/08/13 13:05:04 agc Exp $ Changes to the packages collection and infrastructure on the pkgsrc-2004Q2 branch: @@ -104,4 +104,5 @@ Pullup ticket 89, requested by Grant Beattie [agc 2004-07-30] Build fix for gnutls Pullup ticket 92, requested by Grant Beattie [agc 2004-07-30] Bulk build fix - +Pullup ticket 102, requested by Mark Davies [agc 2004-08-13] + Security fix for kdelibs3 diff --git a/x11/kdelibs3/Makefile b/x11/kdelibs3/Makefile index 1310748f855..42510ff88d8 100644 --- a/x11/kdelibs3/Makefile +++ b/x11/kdelibs3/Makefile @@ -1,6 +1,7 @@ -# $NetBSD: Makefile,v 1.61 2004/06/10 11:39:50 markd Exp $ +# $NetBSD: Makefile,v 1.61.2.1 2004/08/13 13:05:04 agc Exp $ DISTNAME= kdelibs-${_KDE_VERSION} +PKGREVISION= 2 CATEGORIES= x11 COMMENT= Support libraries for the KDE integrated X11 desktop diff --git a/x11/kdelibs3/distinfo b/x11/kdelibs3/distinfo index 63e28448661..146443d225f 100644 --- a/x11/kdelibs3/distinfo +++ b/x11/kdelibs3/distinfo @@ -1,4 +1,4 @@ -$NetBSD: distinfo,v 1.38 2004/06/10 11:39:50 markd Exp $ +$NetBSD: distinfo,v 1.38.2.1 2004/08/13 13:05:04 agc Exp $ SHA1 (kdelibs-3.2.3.tar.bz2) = 33df00cb44694db306c29504f6ee5f3bd4a71c7d Size (kdelibs-3.2.3.tar.bz2) = 12737024 bytes @@ -7,7 +7,17 @@ SHA1 (patch-ad) = fc3a7b173dc93bad196fff3ddd9aef65c92dda64 SHA1 (patch-ae) = 238f16203cd101a5944ff01aa965956392c5b16d SHA1 (patch-af) = 7fbb3abcbf56020e3827ddf9d056beab9d1f3cd7 SHA1 (patch-ag) = e471fdf5428e0f515ef3fe5427622854886ef952 -SHA1 (patch-an) = 41d2721bd55d060cde630771dad0377dbe770d73 +SHA1 (patch-an) = 443560cbbca3d29d2e436ac94b4920da081c99f9 +SHA1 (patch-ap) = 807a36fc910679431115f0d03208977d8cae7bc6 +SHA1 (patch-aq) = 26627136717b912e3c1ec884db4e9712398904cd +SHA1 (patch-ar) = af4fe2fe875f91095aa024c23e17b4144ade283c +SHA1 (patch-as) = e208b595c0f39094a8db16e6aa6b00c0d90420d2 +SHA1 (patch-at) = 9b114f66dd8b9134e884334d3d2217dd1f6e217e +SHA1 (patch-au) = 20bebf25372adcb61065927adb093ddd10ec1b00 +SHA1 (patch-av) = 26c026a500f49847eedd56b143317d6661bf2f54 +SHA1 (patch-aw) = 4514ec04885709cfc402e387346c0c5f72408385 +SHA1 (patch-ax) = 36f21f6b3bb42f43deecd837095318d3f4e3b125 +SHA1 (patch-ay) = 27cf47be52f2f643f808d7092a6fe33458b67fc5 SHA1 (patch-bc) = 434a48d290aa9716b8c6e372419460ebd33cf8ea SHA1 (patch-bd) = f233a73d0a8148e1ae7f4e777c3f5d50b56d768f SHA1 (patch-bu) = 65aca46f30be04c0d8177498eac149437b21ba56 diff --git a/x11/kdelibs3/patches/patch-an b/x11/kdelibs3/patches/patch-an index 7519c48168d..5a271fb7047 100644 --- a/x11/kdelibs3/patches/patch-an +++ b/x11/kdelibs3/patches/patch-an @@ -1,7 +1,37 @@ -$NetBSD: patch-an,v 1.3 2004/02/04 13:58:39 markd Exp $ +$NetBSD: patch-an,v 1.3.4.1 2004/08/13 13:05:04 agc Exp $ --- kdecore/kstandarddirs.cpp.orig 2004-01-26 06:24:42.000000000 +1300 +++ kdecore/kstandarddirs.cpp +@@ -651,7 +651,28 @@ void KStandardDirs::createSpecialResourc + char link[1024]; + link[1023] = 0; + int result = readlink(QFile::encodeName(dir).data(), link, 1023); +- if ((result == -1) && (errno == ENOENT)) ++ bool relink = (result == -1) && (errno == ENOENT); ++ if ((result > 0) && (link[0] == '/')) ++ { ++ link[result] = 0; ++ struct stat stat_buf; ++ int res = lstat(link, &stat_buf); ++ if ((res == -1) && (errno == ENOENT)) ++ { ++ relink = true; ++ } ++ else if ((res == -1) || (!S_ISDIR(stat_buf.st_mode))) ++ { ++ fprintf(stderr, "Error: \"%s\" is not a directory.\n", link); ++ relink = true; ++ } ++ else if (stat_buf.st_uid != getuid()) ++ { ++ fprintf(stderr, "Error: \"%s\" is owned by uid %d instead of uid %d.\n", link, stat_buf.st_uid, getuid()); ++ relink = true; ++ } ++ } ++ if (relink) + { + QString srv = findExe(QString::fromLatin1("lnusertemp"), KDEDIR+QString::fromLatin1("/bin")); + if (srv.isEmpty()) @@ -847,33 +847,33 @@ static int tokenize( QStringList& tokens QString KStandardDirs::kde_default(const char *type) { diff --git a/x11/kdelibs3/patches/patch-ap b/x11/kdelibs3/patches/patch-ap new file mode 100644 index 00000000000..be7c6ece980 --- /dev/null +++ b/x11/kdelibs3/patches/patch-ap @@ -0,0 +1,187 @@ +$NetBSD: patch-ap,v 1.7.4.1 2004/08/13 13:05:05 agc Exp $ + +Index: dcopserver.cpp +=================================================================== +RCS file: /home/kde/kdelibs/dcop/dcopserver.cpp,v +retrieving revision 1.160.2.3 +diff -u -p -r1.160.2.3 dcopserver.cpp +--- dcop/dcopserver.cpp 30 Apr 2004 15:00:08 -0000 1.160.2.3 ++++ dcop/dcopserver.cpp 26 Jul 2004 09:03:06 -0000 +@@ -443,35 +443,78 @@ write_iceauth (FILE *addfp, IceAuthDataE + fprintf (addfp, "\n"); + } + ++#ifndef HAVE_MKSTEMPS ++#include ++#include + +-#ifndef HAVE_MKSTEMP +-static char *unique_filename (const char *path, const char *prefix) +-#else +-static char *unique_filename (const char *path, const char *prefix, int *pFd) +-#endif ++/* this is based on code taken from the GNU libc, distributed under the LGPL license */ ++ ++/* Generate a unique temporary file name from TEMPLATE. ++ ++ TEMPLATE has the form: ++ ++ /ccXXXXXX ++ ++ SUFFIX_LEN tells us how long is (it can be zero length). ++ ++ The last six characters of TEMPLATE before must be "XXXXXX"; ++ they are replaced with a string that makes the filename unique. ++ ++ Returns a file descriptor open on the file for reading and writing. */ ++ ++int mkstemps (char* _template, int suffix_len) + { +-#ifndef HAVE_MKSTEMP +-#ifndef X_NOT_POSIX +- return ((char *) tempnam (path, prefix)); +-#else +- char tempFile[PATH_MAX]; +- char *tmp; ++ static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; ++ char *XXXXXX; ++ int len; ++ int count; ++ int value; ++ ++ len = strlen (_template); ++ ++ if ((int) len < 6 + suffix_len || strncmp (&_template[len - 6 - suffix_len], "XXXXXX", 6)) ++ return -1; ++ ++ XXXXXX = &_template[len - 6 - suffix_len]; ++ ++ value = rand(); ++ for (count = 0; count < 256; ++count) ++ { ++ int v = value; ++ int fd; ++ ++ /* Fill in the random bits. */ ++ XXXXXX[0] = letters[v % 62]; ++ v /= 62; ++ XXXXXX[1] = letters[v % 62]; ++ v /= 62; ++ XXXXXX[2] = letters[v % 62]; ++ v /= 62; ++ XXXXXX[3] = letters[v % 62]; ++ v /= 62; ++ XXXXXX[4] = letters[v % 62]; ++ v /= 62; ++ XXXXXX[5] = letters[v % 62]; ++ ++ fd = open (_template, O_RDWR|O_CREAT|O_EXCL, 0600); ++ if (fd >= 0) ++ /* The file does not exist. */ ++ return fd; ++ ++ /* This is a random value. It is only necessary that the next ++ TMP_MAX values generated by adding 7777 to VALUE are different ++ with (module 2^32). */ ++ value += 7777; ++ } ++ /* We return the null string if we can't find a unique file name. */ ++ _template[0] = '\0'; ++ return -1; ++} + +- snprintf (tempFile, PATH_MAX, "%s/%sXXXXXX", path, prefix); +- tmp = (char *) mktemp (tempFile); +- if (tmp) +- { +- char *ptr = (char *) malloc (strlen (tmp) + 1); +- if (ptr != NULL) +- { +- strcpy (ptr, tmp); +- } +- return (ptr); +- } +- else +- return (NULL); + #endif +-#else ++ ++static char *unique_filename (const char *path, const char *prefix, int *pFd) ++{ + char tempFile[PATH_MAX]; + char *ptr; + +@@ -480,43 +523,10 @@ static char *unique_filename (const char + if (ptr != NULL) + { + strcpy(ptr, tempFile); +- *pFd = mkstemp(ptr); ++ *pFd = mkstemps(ptr, 0); + } + return ptr; +-#endif +-} +- +-#if 0 +-Status SetAuthentication_local (int count, IceListenObj *listenObjs) +-{ +- int i; +- for (i = 0; i < count; i ++) { +- char *prot = IceGetListenConnectionString(listenObjs[i]); +- if (!prot) continue; +- char *host = strchr(prot, '/'); +- char *sock = 0; +- if (host) { +- *host=0; +- host++; +- sock = strchr(host, ':'); +- if (sock) { +- *sock = 0; +- sock++; +- } +- } +-#ifndef NDEBUG +- qDebug("DCOPServer: SetAProc_loc: conn %d, prot=%s, file=%s", +- (unsigned)i, prot, sock); +-#endif +- if (sock && !strcmp(prot, "local")) { +- chmod(sock, 0700); +- } +- IceSetHostBasedAuthProc (listenObjs[i], HostBasedAuthProc); +- free(prot); +- } +- return 1; + } +-#endif + + #define MAGIC_COOKIE_LEN 16 + +@@ -529,28 +539,19 @@ SetAuthentication (int count, IceListenO + int original_umask; + int i; + QCString command; +-#ifdef HAVE_MKSTEMP + int fd; +-#endif + + original_umask = umask (0077); /* disallow non-owner access */ + + path = getenv ("DCOP_SAVE_DIR"); + if (!path) + path = "/tmp"; +-#ifndef HAVE_MKSTEMP +- if ((addAuthFile = unique_filename (path, "dcop")) == NULL) +- goto bad; + +- if (!(addfp = fopen (addAuthFile, "w"))) +- goto bad; +-#else + if ((addAuthFile = unique_filename (path, "dcop", &fd)) == NULL) + goto bad; + + if (!(addfp = fdopen(fd, "wb"))) + goto bad; +-#endif + + if ((*_authDataEntries = static_cast(malloc (count * 2 * sizeof (IceAuthDataEntry)))) == NULL) + goto bad; diff --git a/x11/kdelibs3/patches/patch-aq b/x11/kdelibs3/patches/patch-aq new file mode 100644 index 00000000000..64242f9efeb --- /dev/null +++ b/x11/kdelibs3/patches/patch-aq @@ -0,0 +1,72 @@ +$NetBSD: patch-aq,v 1.4.4.1 2004/08/13 13:05:05 agc Exp $ + +Index: kioslave/http/kcookiejar/kcookiejar.cpp +=================================================================== +RCS file: /home/kde/kdelibs/kioslave/http/kcookiejar/kcookiejar.cpp,v +retrieving revision 1.116 +retrieving revision 1.117 +diff -u -p -r1.116 -r1.117 +--- kioslave/http/kcookiejar/kcookiejar.cpp 19 Jul 2004 10:16:22 -0000 1.116 ++++ kioslave/http/kcookiejar/kcookiejar.cpp 20 Jul 2004 15:29:24 -0000 1.117 +@@ -244,6 +244,14 @@ KCookieJar::KCookieJar() + m_globalAdvice = KCookieDunno; + m_configChanged = false; + m_cookiesChanged = false; ++ ++ QString twoLevelTLD="name,ai,au,bd,bh,ck,eg,et,fk,il,in,kh,kr,mk,mt,na,np,nz,pg,pk,qa,sa,sb,sg,sv,ua,ug,uk,uy,vn,za,zw"; ++ QStringList countries = QStringList::split(',', twoLevelTLD); ++ for(QStringList::ConstIterator it = countries.begin(); ++ it != countries.end(); ++it) ++ { ++ m_twoLevelTLD.replace(*it, (int *) 1); ++ } + } + + // +@@ -528,14 +536,14 @@ static const char * parseNameValue(const + + } + +-static void stripDomain(const QString &_fqdn, QString &_domain) ++void KCookieJar::stripDomain(const QString &_fqdn, QString &_domain) + { + QStringList domains; +- KCookieJar::extractDomains(_fqdn, domains); ++ extractDomains(_fqdn, domains); + _domain = domains[0]; + } + +-static QString stripDomain( KHttpCookiePtr cookiePtr) ++QString KCookieJar::stripDomain( KHttpCookiePtr cookiePtr) + { + QString domain; // We file the cookie under this domain. + if (cookiePtr->domain().isEmpty()) +@@ -620,6 +628,13 @@ void KCookieJar::extractDomains(const QS + { + if (partList.count() == 1) + break; // We only have a TLD left. ++ ++ if ((partList.count() == 2) && (m_twoLevelTLD[partList[1].lower()])) ++ { ++ // This domain uses two-level TLDs in the form xxxx.yy ++ break; ++ } ++ + if ((partList.count() == 2) && (partList[1].length() == 2)) + { + // If this is a TLD, we should stop. (e.g. co.uk) +@@ -634,14 +649,6 @@ void KCookieJar::extractDomains(const QS + break; + } + +- // The .name domain uses ..name +- // Although the TLD is striclty speaking .name, for our purpose +- // it should be .name since people should not be able +- // to set cookies for everyone with the same surname. +- // Matches .name +- if ((partList.count() == 2)&& (partList[1].lower() == L1("name"))) +- break; +- + QString domain = partList.join(L1(".")); + _domains.append('.' + domain); + _domains.append(domain); diff --git a/x11/kdelibs3/patches/patch-ar b/x11/kdelibs3/patches/patch-ar new file mode 100644 index 00000000000..1d2ac305a05 --- /dev/null +++ b/x11/kdelibs3/patches/patch-ar @@ -0,0 +1,37 @@ +$NetBSD: patch-ar,v 1.3.6.1 2004/08/13 13:05:05 agc Exp $ + +Index: kioslave/http/kcookiejar/kcookiejar.h +=================================================================== +RCS file: /home/kde/kdelibs/kioslave/http/kcookiejar/kcookiejar.h,v +retrieving revision 1.33 +retrieving revision 1.34 +diff -u -p -r1.33 -r1.34 +--- kioslave/http/kcookiejar/kcookiejar.h 22 Nov 2003 16:50:45 -0000 1.33 ++++ kioslave/http/kcookiejar/kcookiejar.h 20 Jul 2004 15:29:24 -0000 1.34 +@@ -306,8 +306,8 @@ public: + /** + * Returns a list of domains (_domainList) relevant for this host. + */ +- static void extractDomains(const QString &_fqdn, +- QStringList &_domainList); ++ void extractDomains(const QString &_fqdn, ++ QStringList &_domainList); + + static QString adviceToStr(KCookieAdvice _advice); + static KCookieAdvice strToAdvice(const QString &_str); +@@ -329,11 +329,15 @@ public: + */ + void setShowCookieDetails (bool value) { m_showCookieDetails = value; } + ++protected: ++ void stripDomain(const QString &_fqdn, QString &_domain); ++ QString stripDomain( KHttpCookiePtr cookiePtr); + + protected: + QStringList m_domainList; + KCookieAdvice m_globalAdvice; + QDict m_cookieDomains; ++ QDict m_twoLevelTLD; + + bool m_configChanged; + bool m_cookiesChanged; diff --git a/x11/kdelibs3/patches/patch-as b/x11/kdelibs3/patches/patch-as new file mode 100644 index 00000000000..7ac6f469d26 --- /dev/null +++ b/x11/kdelibs3/patches/patch-as @@ -0,0 +1,37 @@ +$NetBSD: patch-as,v 1.3.4.1 2004/08/13 13:05:05 agc Exp $ + +Index: kioslave/http/kcookiejar/kcookieserver.cpp +=================================================================== +RCS file: /home/kde/kdelibs/kioslave/http/kcookiejar/kcookieserver.cpp,v +retrieving revision 1.50 +retrieving revision 1.51 +diff -u -p -r1.50 -r1.51 +--- kioslave/http/kcookiejar/kcookieserver.cpp 9 Jun 2003 10:56:42 -0000 1.50 ++++ kioslave/http/kcookiejar/kcookieserver.cpp 20 Jul 2004 15:29:24 -0000 1.51 +@@ -131,7 +131,7 @@ bool KCookieServer::cookiesPending( cons + if (!KCookieJar::parseURL(url, fqdn, path)) + return false; + +- KCookieJar::extractDomains( fqdn, domains ); ++ mCookieJar->extractDomains( fqdn, domains ); + for( KHttpCookie *cookie = mPendingCookies->first(); + cookie != 0L; + cookie = mPendingCookies->next()) +@@ -557,7 +557,7 @@ KCookieServer::setDomainAdvice(QString u + if (KCookieJar::parseURL(url, fqdn, dummy)) + { + QStringList domains; +- KCookieJar::extractDomains(fqdn, domains); ++ mCookieJar->extractDomains(fqdn, domains); + mCookieJar->setDomainAdvice(domains[0], + KCookieJar::strToAdvice(advice)); + } +@@ -573,7 +573,7 @@ KCookieServer::getDomainAdvice(QString u + if (KCookieJar::parseURL(url, fqdn, dummy)) + { + QStringList domains; +- KCookieJar::extractDomains(fqdn, domains); ++ mCookieJar->extractDomains(fqdn, domains); + advice = mCookieJar->getDomainAdvice(domains[0]); + } + return KCookieJar::adviceToStr(advice); diff --git a/x11/kdelibs3/patches/patch-at b/x11/kdelibs3/patches/patch-at new file mode 100644 index 00000000000..c6f347068b1 --- /dev/null +++ b/x11/kdelibs3/patches/patch-at @@ -0,0 +1,29 @@ +$NetBSD: patch-at,v 1.3.6.1 2004/08/13 13:05:05 agc Exp $ + +Index: khtml/khtml_ext.cpp +=================================================================== +RCS file: /home/kde/kdelibs/khtml/khtml_ext.cpp,v +retrieving revision 1.85.2.2 +diff -u -p -r1.85.2.2 khtml_ext.cpp +--- khtml/khtml_ext.cpp 24 Apr 2004 08:20:46 -0000 1.85.2.2 ++++ khtml/khtml_ext.cpp 3 Aug 2004 14:36:43 -0000 +@@ -646,6 +646,19 @@ bool KHTMLPartBrowserHostExtension::open + return m_part->openURLInFrame( url, urlArgs ); + } + ++void KHTMLPartBrowserHostExtension::virtual_hook( int id, void *data ) ++{ ++ if (id == VIRTUAL_FIND_FRAME_PARENT) ++ { ++ FindFrameParentParams *param = static_cast(data); ++ KHTMLPart *parentPart = m_part->findFrameParent(param->callingPart, param->frame); ++ if (parentPart) ++ param->parent = parentPart->browserHostExtension(); ++ return; ++ } ++ BrowserHostExtension::virtual_hook( id, data ); ++} ++ + // BCI: remove in KDE 4 + KHTMLZoomFactorAction::KHTMLZoomFactorAction( KHTMLPart *part, bool direction, const QString &text, const QString &icon, const QObject *receiver, const char *slot, QObject *parent, const char *name ) + : KAction( text, icon, 0, receiver, slot, parent, name ) diff --git a/x11/kdelibs3/patches/patch-au b/x11/kdelibs3/patches/patch-au new file mode 100644 index 00000000000..c791db82732 --- /dev/null +++ b/x11/kdelibs3/patches/patch-au @@ -0,0 +1,19 @@ +$NetBSD: patch-au,v 1.3.4.1 2004/08/13 13:05:05 agc Exp $ + +Index: khtml/khtml_ext.h +=================================================================== +RCS file: /home/kde/kdelibs/khtml/khtml_ext.h,v +retrieving revision 1.26.2.1 +diff -u -p -r1.26.2.1 khtml_ext.h +--- khtml/khtml_ext.h 29 Feb 2004 15:27:43 -0000 1.26.2.1 ++++ khtml/khtml_ext.h 3 Aug 2004 14:36:43 -0000 +@@ -98,6 +98,9 @@ public: + virtual const QPtrList frames() const; + + virtual bool openURLInFrame( const KURL &url, const KParts::URLArgs &urlArgs ); ++ ++protected: ++ virtual void virtual_hook( int id, void* data ); + private: + KHTMLPart *m_part; + }; diff --git a/x11/kdelibs3/patches/patch-av b/x11/kdelibs3/patches/patch-av new file mode 100644 index 00000000000..525ca16dd27 --- /dev/null +++ b/x11/kdelibs3/patches/patch-av @@ -0,0 +1,272 @@ +$NetBSD: patch-av,v 1.8.4.1 2004/08/13 13:05:05 agc Exp $ + +Index: khtml/khtml_part.cpp +=================================================================== +RCS file: /home/kde/kdelibs/khtml/khtml_part.cpp,v +retrieving revision 1.959.2.20 +diff -u -p -r1.959.2.20 khtml_part.cpp +--- khtml/khtml_part.cpp 29 Jun 2004 09:08:16 -0000 1.959.2.20 ++++ khtml/khtml_part.cpp 3 Aug 2004 14:36:46 -0000 +@@ -757,12 +757,16 @@ DOM::Document KHTMLPart::document() cons + return d->m_doc; + } + +- + KParts::BrowserExtension *KHTMLPart::browserExtension() const + { + return d->m_extension; + } + ++KParts::BrowserHostExtension *KHTMLPart::browserHostExtension() const ++{ ++ return d->m_hostExtension; ++} ++ + KHTMLView *KHTMLPart::view() const + { + return d->m_view; +@@ -880,29 +884,18 @@ QVariant KHTMLPart::crossFrameExecuteScr + // we always allow these + } + else { +- while (destpart->parentPart()) +- destpart = destpart->parentPart(); +- destpart = destpart->findFrame(target); +- ++ destpart = findFrame(target); + if (!destpart) +- destpart = this; // ### doesn't make sense, does it? ++ destpart = this; + } + + // easy way out? + if (destpart == this) + return executeScript(DOM::Node(), script); + +- + // now compare the domains +- if (!destpart->htmlDocument().isNull() && +- !htmlDocument().isNull()) { +- DOM::DOMString actDomain = htmlDocument().domain(); +- DOM::DOMString destDomain = destpart->htmlDocument().domain(); +- +- if (actDomain == destDomain) +- return destpart->executeScript(DOM::Node(), script); +- } +- ++ if (destpart->checkFrameAccess(this)) ++ return destpart->executeScript(DOM::Node(), script); + + // eww, something went wrong. better execute it in our frame + return executeScript(DOM::Node(), script); +@@ -3358,7 +3351,7 @@ void KHTMLPart::urlSelected( const QStri + if ( hasTarget ) + { + // unknown frame names should open in a new window. +- khtml::ChildFrame *frame = recursiveFrameRequest( cURL, args, false ); ++ khtml::ChildFrame *frame = recursiveFrameRequest( this, cURL, args, false ); + if ( frame ) + { + args.metaData()["referrer"] = d->m_referrer; +@@ -4364,6 +4357,7 @@ void KHTMLPart::slotChildDocCreated() + void KHTMLPart::slotChildURLRequest( const KURL &url, const KParts::URLArgs &args ) + { + khtml::ChildFrame *child = frame( sender()->parent() ); ++ KHTMLPart *callingHtmlPart = const_cast(dynamic_cast(sender()->parent())); + + // TODO: handle child target correctly! currently the script are always executed fur the parent + QString urlStr = url.url(); +@@ -4395,7 +4389,7 @@ void KHTMLPart::slotChildURLRequest( con + } + else if ( frameName != QString::fromLatin1( "_self" ) ) + { +- khtml::ChildFrame *_frame = recursiveFrameRequest( url, args ); ++ khtml::ChildFrame *_frame = recursiveFrameRequest( callingHtmlPart, url, args ); + + if ( !_frame ) + { +@@ -4437,46 +4431,92 @@ khtml::ChildFrame *KHTMLPart::frame( con + return 0L; + } + +-//#define DEBUG_FINDFRAME ++//#define DEBUG_FINDFRAME + +-KHTMLPart *KHTMLPart::findFrame( const QString &f ) ++bool KHTMLPart::checkFrameAccess(KHTMLPart *callingHtmlPart) + { ++ if (callingHtmlPart == this) ++ return true; // trivial ++ ++ if (htmlDocument().isNull()) { + #ifdef DEBUG_FINDFRAME +- kdDebug(6050) << "KHTMLPart::findFrame '" << f << "'" << endl; +- FrameIt it2 = d->m_frames.begin(); +- FrameIt end = d->m_frames.end(); +- for (; it2 != end; ++it2 ) +- kdDebug(6050) << " - having frame '" << (*it2).m_name << "'" << endl; ++ kdDebug(6050) << "KHTMLPart::checkFrameAccess: Empty part " << this << " URL = " << m_url << endl; + #endif +- // ### http://www.w3.org/TR/html4/appendix/notes.html#notes-frames +- ConstFrameIt it = d->m_frames.find( f ); +- if ( it == d->m_frames.end() ) +- { ++ return false; // we are empty? ++ } ++ ++ // now compare the domains ++ if (callingHtmlPart && !callingHtmlPart->htmlDocument().isNull() && ++ !htmlDocument().isNull()) { ++ DOM::DOMString actDomain = callingHtmlPart->htmlDocument().domain(); ++ DOM::DOMString destDomain = htmlDocument().domain(); ++ + #ifdef DEBUG_FINDFRAME +- kdDebug(6050) << "KHTMLPart::findFrame frame " << f << " not found" << endl; ++ kdDebug(6050) << "KHTMLPart::checkFrameAccess: actDomain = '" << actDomain.string() << "' destDomain = '" << destDomain.string() << "'" << endl; + #endif +- return 0L; ++ ++ if (actDomain == destDomain) ++ return true; + } +- else { +- KParts::ReadOnlyPart *p = (*it).m_part; +- if ( p && p->inherits( "KHTMLPart" )) +- { + #ifdef DEBUG_FINDFRAME +- kdDebug(6050) << "KHTMLPart::findFrame frame " << f << " is a KHTMLPart, ok" << endl; ++ else ++ { ++ kdDebug(6050) << "KHTMLPart::checkFrameAccess: Unknown part/domain " << callingHtmlPart << " tries to access part " << this << endl; ++ } + #endif +- return (KHTMLPart*)p; +- } +- else +- { ++ return false; ++} ++ ++KHTMLPart * ++KHTMLPart::findFrameParent( KParts::ReadOnlyPart *callingPart, const QString &f, khtml::ChildFrame **childFrame ) ++{ + #ifdef DEBUG_FINDFRAME +- if (p) +- kdWarning() << "KHTMLPart::findFrame frame " << f << " found but isn't a KHTMLPart ! " << p->className() << endl; +- else +- kdWarning() << "KHTMLPart::findFrame frame " << f << " found but m_part=0L" << endl; ++ kdDebug(6050) << "KHTMLPart::findFrameParent: this = " << this << " URL = " << m_url << " findFrameParent( " << f << " )" << endl; ++#endif ++ // Check access ++ KHTMLPart *callingHtmlPart = dynamic_cast(callingPart); ++ ++ if (!checkFrameAccess(callingHtmlPart)) ++ return 0; ++ ++ FrameIt it = d->m_frames.find( f ); ++ FrameIt end = d->m_frames.end(); ++ if ( it != end ) ++ { ++#ifdef DEBUG_FINDFRAME ++ kdDebug(6050) << "KHTMLPart::findFrameParent: FOUND!" << endl; + #endif +- return 0L; ++ if (childFrame) ++ *childFrame = &(*it); ++ return this; ++ } ++ ++ it = d->m_frames.begin(); ++ for (; it != end; ++it ) ++ { ++ KParts::ReadOnlyPart *p = (*it).m_part; ++ if ( p && p->inherits( "KHTMLPart" )) ++ { ++ KHTMLPart *frameParent = static_cast(p)->findFrameParent(callingPart, f, childFrame); ++ if (frameParent) ++ return frameParent; + } + } ++ return 0; ++} ++ ++ ++KHTMLPart *KHTMLPart::findFrame( const QString &f ) ++{ ++ khtml::ChildFrame *childFrame; ++ KHTMLPart *parentFrame = findFrameParent(this, f, &childFrame); ++ if (parentFrame) ++ { ++ KParts::ReadOnlyPart *p = childFrame->m_part; ++ if ( p && p->inherits( "KHTMLPart" )) ++ return static_cast(p); ++ } ++ return 0; + } + + KParts::ReadOnlyPart *KHTMLPart::currentFrame() const +@@ -4514,37 +4554,29 @@ KHTMLPart *KHTMLPart::parentPart() + return (KHTMLPart *)parent(); + } + +-khtml::ChildFrame *KHTMLPart::recursiveFrameRequest( const KURL &url, const KParts::URLArgs &args, +- bool callParent ) ++khtml::ChildFrame *KHTMLPart::recursiveFrameRequest( KHTMLPart *callingHtmlPart, const KURL &url, ++ const KParts::URLArgs &args, bool callParent ) + { +- FrameIt it = d->m_frames.find( args.frameName ); +- +- if ( it != d->m_frames.end() ) +- return &(*it); +- +- it = d->m_frames.begin(); +- FrameIt end = d->m_frames.end(); +- for (; it != end; ++it ) +- if ( (*it).m_part && (*it).m_part->inherits( "KHTMLPart" ) ) +- { +- KHTMLPart *childPart = (KHTMLPart *)(KParts::ReadOnlyPart *)(*it).m_part; +- +- khtml::ChildFrame *res = childPart->recursiveFrameRequest( url, args, false ); +- if ( !res ) +- continue; +- +- childPart->requestObject( res, url, args ); +- return 0L; +- } ++#ifdef DEBUG_FINDFRAME ++ kdDebug( 6050 ) << "KHTMLPart::recursiveFrameRequest this = " << this << ", frame = " << args.frameName << ", url = " << url << endl; ++#endif ++ khtml::ChildFrame *childFrame; ++ KHTMLPart *childPart = findFrameParent(callingHtmlPart, args.frameName, &childFrame); ++ if (childPart) ++ { ++ if (childPart == this) ++ return childFrame; ++ ++ childPart->requestObject( childFrame, url, args ); ++ return 0; ++ } + + if ( parentPart() && callParent ) + { +- khtml::ChildFrame *res = parentPart()->recursiveFrameRequest( url, args ); ++ khtml::ChildFrame *res = parentPart()->recursiveFrameRequest( callingHtmlPart, url, args, callParent ); + +- if ( res ) +- parentPart()->requestObject( res, url, args ); +- +- return 0L; ++ if ( res ) ++ parentPart()->requestObject( res, url, args ); + } + + return 0L; +@@ -4552,7 +4584,7 @@ khtml::ChildFrame *KHTMLPart::recursiveF + + void KHTMLPart::saveState( QDataStream &stream ) + { +- kdDebug( 6050 ) << "KHTMLPart::saveState saving URL " << m_url.url() << endl; ++ kdDebug( 6050 ) << "KHTMLPart::saveState this = " << this << " saving URL " << m_url.url() << endl; + + stream << m_url << (Q_INT32)d->m_view->contentsX() << (Q_INT32)d->m_view->contentsY() + << (Q_INT32) d->m_view->contentsWidth() << (Q_INT32) d->m_view->contentsHeight() << (Q_INT32) d->m_view->marginWidth() << (Q_INT32) d->m_view->marginHeight(); diff --git a/x11/kdelibs3/patches/patch-aw b/x11/kdelibs3/patches/patch-aw new file mode 100644 index 00000000000..459a6f2f5aa --- /dev/null +++ b/x11/kdelibs3/patches/patch-aw @@ -0,0 +1,52 @@ +$NetBSD: patch-aw,v 1.3.4.1 2004/08/13 13:05:05 agc Exp $ + +Index: khtml/khtml_part.h +=================================================================== +RCS file: /home/kde/kdelibs/khtml/khtml_part.h,v +retrieving revision 1.248.2.5 +diff -u -p -r1.248.2.5 khtml_part.h +--- khtml/khtml_part.h 29 Jun 2004 09:08:16 -0000 1.248.2.5 ++++ khtml/khtml_part.h 3 Aug 2004 14:36:47 -0000 +@@ -287,6 +287,7 @@ public: + */ + KParts::BrowserExtension *browserExtension() const; + KParts::LiveConnectExtension *liveConnectExtension( const khtml::RenderPart *) const; ++ KParts::BrowserHostExtension *browserHostExtension() const; + + /** + * Returns a pointer to the HTML document's view. +@@ -812,6 +813,16 @@ public: + KHTMLPart *findFrame( const QString &f ); + + /** ++ * @internal ++ * Recursively finds the part containing the frame with name @p f ++ * and checks if it is accessible by @p callingPart ++ * Returns 0L if no suitable frame can't be found. ++ * Returns parent part if a suitable frame was found and ++ * frame info in @p *childFrame ++ */ ++ KHTMLPart *findFrameParent( KParts::ReadOnlyPart *callingPart, const QString &f, khtml::ChildFrame **childFrame=0 ); ++ ++ /** + * Return the current frame (the one that has focus) + * Not necessarily a direct child of ours, framesets can be nested. + * Returns "this" if this part isn't a frameset. +@@ -1376,6 +1387,8 @@ private: + + bool restoreURL( const KURL &url ); + void emitSelectionChanged(); ++ // Returns whether callingHtmlPart may access this part ++ bool checkFrameAccess(KHTMLPart *callingHtmlPart); + bool openURLInFrame( const KURL &url, const KParts::URLArgs &urlArgs ); + void startAutoScroll(); + void stopAutoScroll(); +@@ -1434,7 +1447,7 @@ private: + DOM::DocumentImpl *xmlDocImpl() const; + khtml::ChildFrame *frame( const QObject *obj ); + +- khtml::ChildFrame *recursiveFrameRequest( const KURL &url, const KParts::URLArgs &args, bool callParent = true ); ++ khtml::ChildFrame *recursiveFrameRequest( KHTMLPart *callingHtmlPart, const KURL &url, const KParts::URLArgs &args, bool callParent = true ); + + bool checkLinkSecurity( const KURL &linkURL,const QString &message = QString::null, const QString &button = QString::null ); + QVariant executeScript( const QString& filename, int baseLine, const DOM::Node &n, const QString& script ); diff --git a/x11/kdelibs3/patches/patch-ax b/x11/kdelibs3/patches/patch-ax new file mode 100644 index 00000000000..7429b5ea1c8 --- /dev/null +++ b/x11/kdelibs3/patches/patch-ax @@ -0,0 +1,27 @@ +$NetBSD: patch-ax,v 1.3.6.1 2004/08/13 13:05:05 agc Exp $ + +Index: kparts/browserextension.cpp +=================================================================== +RCS file: /home/kde/kdelibs/kparts/browserextension.cpp,v +retrieving revision 1.60.2.1 +diff -u -p -r1.60.2.1 browserextension.cpp +--- kparts/browserextension.cpp 10 Apr 2004 15:08:49 -0000 1.60.2.1 ++++ kparts/browserextension.cpp 3 Aug 2004 14:36:48 -0000 +@@ -636,6 +636,17 @@ BrowserHostExtension *BrowserHostExtensi + void BrowserExtension::virtual_hook( int, void* ) + { /*BASE::virtual_hook( id, data );*/ } + ++BrowserHostExtension * ++BrowserHostExtension::findFrameParent(KParts::ReadOnlyPart *callingPart, const QString &frame) ++{ ++ FindFrameParentParams param; ++ param.parent = 0; ++ param.callingPart = callingPart; ++ param.frame = frame; ++ virtual_hook(VIRTUAL_FIND_FRAME_PARENT, ¶m); ++ return param.parent; ++} ++ + void BrowserHostExtension::virtual_hook( int, void* ) + { /*BASE::virtual_hook( id, data );*/ } + diff --git a/x11/kdelibs3/patches/patch-ay b/x11/kdelibs3/patches/patch-ay new file mode 100644 index 00000000000..9fd9d5a781c --- /dev/null +++ b/x11/kdelibs3/patches/patch-ay @@ -0,0 +1,47 @@ +$NetBSD: patch-ay,v 1.3.4.1 2004/08/13 13:05:05 agc Exp $ + +Index: kparts/browserextension.h +=================================================================== +RCS file: /home/kde/kdelibs/kparts/browserextension.h,v +retrieving revision 1.110 +diff -u -p -r1.110 browserextension.h +--- kparts/browserextension.h 26 Sep 2003 07:13:13 -0000 1.110 ++++ kparts/browserextension.h 3 Aug 2004 14:36:48 -0000 +@@ -671,10 +671,16 @@ public: + * + * Note that this method does not query the child objects recursively. + */ +- + virtual const QPtrList frames() const; + + /** ++ * @internal ++ * Returns the part that contains @p frame and that may be accessed ++ * by @p callingPart ++ */ ++ BrowserHostExtension *findFrameParent(KParts::ReadOnlyPart *callingPart, const QString &frame); ++ ++ /** + * Opens the given url in a hosted child frame. The frame name is specified in the + * frameName variable in the urlArgs argument structure (see KParts::URLArgs ) . + */ +@@ -687,6 +693,19 @@ public: + static BrowserHostExtension *childObject( QObject *obj ); + + protected: ++ /** This 'enum' along with the structure below is NOT part of the public API. ++ * It's going to disappear in KDE 4.0 and is likely to change inbetween. ++ * ++ * @internal ++ */ ++ enum { VIRTUAL_FIND_FRAME_PARENT = 0x10 }; ++ struct FindFrameParentParams ++ { ++ BrowserHostExtension *parent; ++ KParts::ReadOnlyPart *callingPart; ++ QString frame; ++ }; ++ + virtual void virtual_hook( int id, void* data ); + private: + class BrowserHostExtensionPrivate; -- cgit v1.2.3