head 1.3; access; symbols pkgsrc-2026Q1:1.3.0.126 pkgsrc-2026Q1-base:1.3 pkgsrc-2025Q4:1.3.0.124 pkgsrc-2025Q4-base:1.3 pkgsrc-2025Q3:1.3.0.122 pkgsrc-2025Q3-base:1.3 pkgsrc-2025Q2:1.3.0.120 pkgsrc-2025Q2-base:1.3 pkgsrc-2025Q1:1.3.0.118 pkgsrc-2025Q1-base:1.3 pkgsrc-2024Q4:1.3.0.116 pkgsrc-2024Q4-base:1.3 pkgsrc-2024Q3:1.3.0.114 pkgsrc-2024Q3-base:1.3 pkgsrc-2024Q2:1.3.0.112 pkgsrc-2024Q2-base:1.3 pkgsrc-2024Q1:1.3.0.110 pkgsrc-2024Q1-base:1.3 pkgsrc-2023Q4:1.3.0.108 pkgsrc-2023Q4-base:1.3 pkgsrc-2023Q3:1.3.0.106 pkgsrc-2023Q3-base:1.3 pkgsrc-2023Q2:1.3.0.104 pkgsrc-2023Q2-base:1.3 pkgsrc-2023Q1:1.3.0.102 pkgsrc-2023Q1-base:1.3 pkgsrc-2022Q4:1.3.0.100 pkgsrc-2022Q4-base:1.3 pkgsrc-2022Q3:1.3.0.98 pkgsrc-2022Q3-base:1.3 pkgsrc-2022Q2:1.3.0.96 pkgsrc-2022Q2-base:1.3 pkgsrc-2022Q1:1.3.0.94 pkgsrc-2022Q1-base:1.3 pkgsrc-2021Q4:1.3.0.92 pkgsrc-2021Q4-base:1.3 pkgsrc-2021Q3:1.3.0.90 pkgsrc-2021Q3-base:1.3 pkgsrc-2021Q2:1.3.0.88 pkgsrc-2021Q2-base:1.3 pkgsrc-2021Q1:1.3.0.86 pkgsrc-2021Q1-base:1.3 pkgsrc-2020Q4:1.3.0.84 pkgsrc-2020Q4-base:1.3 pkgsrc-2020Q3:1.3.0.82 pkgsrc-2020Q3-base:1.3 pkgsrc-2020Q2:1.3.0.78 pkgsrc-2020Q2-base:1.3 pkgsrc-2020Q1:1.3.0.58 pkgsrc-2020Q1-base:1.3 pkgsrc-2019Q4:1.3.0.80 pkgsrc-2019Q4-base:1.3 pkgsrc-2019Q3:1.3.0.76 pkgsrc-2019Q3-base:1.3 pkgsrc-2019Q2:1.3.0.74 pkgsrc-2019Q2-base:1.3 pkgsrc-2019Q1:1.3.0.72 pkgsrc-2019Q1-base:1.3 pkgsrc-2018Q4:1.3.0.70 pkgsrc-2018Q4-base:1.3 pkgsrc-2018Q3:1.3.0.68 pkgsrc-2018Q3-base:1.3 pkgsrc-2018Q2:1.3.0.66 pkgsrc-2018Q2-base:1.3 pkgsrc-2018Q1:1.3.0.64 pkgsrc-2018Q1-base:1.3 pkgsrc-2017Q4:1.3.0.62 pkgsrc-2017Q4-base:1.3 pkgsrc-2017Q3:1.3.0.60 pkgsrc-2017Q3-base:1.3 pkgsrc-2017Q2:1.3.0.56 pkgsrc-2017Q2-base:1.3 pkgsrc-2017Q1:1.3.0.54 pkgsrc-2017Q1-base:1.3 pkgsrc-2016Q4:1.3.0.52 pkgsrc-2016Q4-base:1.3 pkgsrc-2016Q3:1.3.0.50 pkgsrc-2016Q3-base:1.3 pkgsrc-2016Q2:1.3.0.48 pkgsrc-2016Q2-base:1.3 pkgsrc-2016Q1:1.3.0.46 pkgsrc-2016Q1-base:1.3 pkgsrc-2015Q4:1.3.0.44 pkgsrc-2015Q4-base:1.3 pkgsrc-2015Q3:1.3.0.42 pkgsrc-2015Q3-base:1.3 pkgsrc-2015Q2:1.3.0.40 pkgsrc-2015Q2-base:1.3 pkgsrc-2015Q1:1.3.0.38 pkgsrc-2015Q1-base:1.3 pkgsrc-2014Q4:1.3.0.36 pkgsrc-2014Q4-base:1.3 pkgsrc-2014Q3:1.3.0.34 pkgsrc-2014Q3-base:1.3 pkgsrc-2014Q2:1.3.0.32 pkgsrc-2014Q2-base:1.3 pkgsrc-2014Q1:1.3.0.30 pkgsrc-2014Q1-base:1.3 pkgsrc-2013Q4:1.3.0.28 pkgsrc-2013Q4-base:1.3 pkgsrc-2013Q3:1.3.0.26 pkgsrc-2013Q3-base:1.3 pkgsrc-2013Q2:1.3.0.24 pkgsrc-2013Q2-base:1.3 pkgsrc-2013Q1:1.3.0.22 pkgsrc-2013Q1-base:1.3 pkgsrc-2012Q4:1.3.0.20 pkgsrc-2012Q4-base:1.3 pkgsrc-2012Q3:1.3.0.18 pkgsrc-2012Q3-base:1.3 pkgsrc-2012Q2:1.3.0.16 pkgsrc-2012Q2-base:1.3 pkgsrc-2012Q1:1.3.0.14 pkgsrc-2012Q1-base:1.3 pkgsrc-2011Q4:1.3.0.12 pkgsrc-2011Q4-base:1.3 pkgsrc-2011Q3:1.3.0.10 pkgsrc-2011Q3-base:1.3 pkgsrc-2011Q2:1.3.0.8 pkgsrc-2011Q2-base:1.3 pkgsrc-2011Q1:1.3.0.6 pkgsrc-2011Q1-base:1.3 pkgsrc-2010Q4:1.3.0.4 pkgsrc-2010Q4-base:1.3 pkgsrc-2010Q3:1.3.0.2 pkgsrc-2010Q3-base:1.3 pkgsrc-2009Q4:1.1.0.2 pkgsrc-2009Q4-base:1.1; locks; strict; comment @# @; 1.3 date 2010.09.03.13.47.12; author drochner; state Exp; branches; next 1.2; 1.2 date 2010.01.29.18.19.09; author adam; state dead; branches; next 1.1; 1.1 date 2010.01.08.09.56.09; author drochner; state Exp; branches; next ; desc @@ 1.3 log @make that the "silent" qmake feature flag is silently ignored, it is incompatible with the way libtool support was hacked in (we were getting something like "libtool --mode=compile echo compiling foo && cc foo.c ...") bump PKGREVISION @ text @$NetBSD$ --- mkspecs/features/silent.prf.orig 2010-06-02 02:03:08.000000000 +0000 +++ mkspecs/features/silent.prf @@@@ -1,6 +1,7 @@@@ -!macx-xcode { - QMAKE_CC = @@echo compiling $< && $$QMAKE_CC - QMAKE_CXX = @@echo compiling $< && $$QMAKE_CXX - !contains(QMAKE_LINK, "@@:"):QMAKE_LINK = @@echo linking $@@ && $$QMAKE_LINK - QMAKE_LINK_SHLIB = @@echo linking $@@ && $$QMAKE_LINK_SHLIB -} +# XXX ignore -- incompatible with libtool usage +#!macx-xcode { +# QMAKE_CC = @@echo compiling $< && $$QMAKE_CC +# QMAKE_CXX = @@echo compiling $< && $$QMAKE_CXX +# !contains(QMAKE_LINK, "@@:"):QMAKE_LINK = @@echo linking $@@ && $$QMAKE_LINK +# QMAKE_LINK_SHLIB = @@echo linking $@@ && $$QMAKE_LINK_SHLIB +#} @ 1.2 log @Changes 4.6.1: * Optimized empty QUrl creation * Improve performance of getting the canonical filename on Linux and Symbian by using realpath() system call. * Avoid stat() when opening a file. * Do not look at the Qt patch-level version embedded in plugins' buildkeys when trying to determine if the plugin is compatible * Bug-fixes * load() and loadFromData() can now support compressed GL textures in the DDS, ETC1, PVRTC2, and PVRTC4 formats if the OpenGL graphics system is active and the appropriate extensions are present in the GL implementation. * Fixed a small leak when using the new QPixmapCache::Key based API. @ text @d1 1 a1 1 $NetBSD: patch-ca,v 1.1 2010/01/08 09:56:09 drochner Exp $ d3 16 a18 271 --- src/3rdparty/webkit/WebCore/loader/FTPDirectoryParser.cpp.orig 2009-09-29 11:01:36.000000000 +0000 +++ src/3rdparty/webkit/WebCore/loader/FTPDirectoryParser.cpp @@@@ -53,6 +53,13 @@@@ static struct tm *gmtimeQt(const time_t #define gmtime_r(x, y) gmtime_s((y), (x)) #endif +static inline FTPEntryType ParsingFailed(ListState& state) +{ + if (state.parsedOne || state.listStyle) /* junk if we fail to parse */ + return FTPJunkEntry; /* this time but had previously parsed sucessfully */ + return FTPMiscEntry; /* its part of a comment or error message */ +} + FTPEntryType parseOneFTPLine(const char* line, ListState& state, ListResult& result) { result.clear(); @@@@ -121,6 +128,9 @@@@ FTPEntryType parseOneFTPLine(const char* } } } + + if (!numtoks) + return ParsingFailed(state); linelen_sans_wsp = &(tokens[numtoks-1][toklen[numtoks-1]]) - tokens[0]; if (numtoks == (sizeof(tokens)/sizeof(tokens[0])) ) @@@@ -352,11 +362,16 @@@@ FTPEntryType parseOneFTPLine(const char* pos++; p++; } - if (lstyle && pos < (toklen[0]-1) && *p == ']') - { + if (lstyle && pos < (toklen[0]-1)) + { + /* ']' was found and there is at least one character after it */ + ASSERT(*p == ']'); pos++; p++; tokmarker = pos; /* length of leading "[DIR1.DIR2.etc]" */ + } else { + /* not a CMU style listing */ + lstyle = 0; } } while (lstyle && pos < toklen[0] && *p != ';') @@@@ -383,7 +398,7 @@@@ FTPEntryType parseOneFTPLine(const char* pos -= tokmarker; /* => fnlength sans "[DIR1.DIR2.etc]" */ p = &(tokens[0][tokmarker]); /* offset of basename */ - if (!lstyle || pos > 80) /* VMS filenames can't be longer than that */ + if (!lstyle || pos == 0 || pos > 80) /* VMS filenames can't be longer than that */ { lstyle = 0; } @@@@ -776,7 +791,7 @@@@ FTPEntryType parseOneFTPLine(const char* state.parsedOne = true; state.listStyle = lstyle; - p = &(line[linelen_sans_wsp]); /* line end sans wsp */ + p = &(line[linelen]); /* line end */ result.caseSensitive = true; result.filename = tokens[3]; result.filenameLength = p - tokens[3]; @@@@ -784,29 +799,46 @@@@ FTPEntryType parseOneFTPLine(const char* if (*tokens[2] != '<') /* not or */ { + // try to handle correctly spaces at the beginning of the filename + // filesize (token[2]) must end at offset 38 + if (tokens[2] + toklen[2] - line == 38) { + result.filename = &(line[39]); + result.filenameLength = p - result.filename; + } result.type = FTPFileEntry; pos = toklen[2]; result.fileSize = String(tokens[2], pos); } - else if ((tokens[2][1]) != 'D') /* not */ - { - result.type = FTPJunkEntry; /* unknown until junc for sure */ - if (result.filenameLength > 4) - { - p = result.filename; - for (pos = result.filenameLength - 4; pos > 0; pos--) - { - if (p[0] == ' ' && p[3] == ' ' && p[2] == '>' && - (p[1] == '=' || p[1] == '-')) + else { + // try to handle correctly spaces at the beginning of the filename + // token[2] must begin at offset 24, the length is 5 or 10 + // token[3] must begin at offset 39 or higher + if (tokens[2] - line == 24 && (toklen[2] == 5 || toklen[2] == 10) && + tokens[3] - line >= 39) { + result.filename = &(line[39]); + result.filenameLength = p - result.filename; + } + + if ((tokens[2][1]) != 'D') /* not */ + { + result.type = FTPJunkEntry; /* unknown until junc for sure */ + if (result.filenameLength > 4) + { + p = result.filename; + for (pos = result.filenameLength - 4; pos > 0; pos--) { - result.type = FTPLinkEntry; - result.filenameLength = p - result.filename; - result.linkname = p + 4; - result.linknameLength = &(line[linelen_sans_wsp]) - - result.linkname; - break; + if (p[0] == ' ' && p[3] == ' ' && p[2] == '>' && + (p[1] == '=' || p[1] == '-')) + { + result.type = FTPLinkEntry; + result.filenameLength = p - result.filename; + result.linkname = p + 4; + result.linknameLength = &(line[linelen]) + - result.linkname; + break; + } + p++; } - p++; } } } @@@@ -817,8 +849,13 @@@@ FTPEntryType parseOneFTPLine(const char* result.modifiedTime.tm_mon--; result.modifiedTime.tm_mday = atoi(tokens[0]+3); result.modifiedTime.tm_year = atoi(tokens[0]+6); + /* if year has only two digits then assume that + 00-79 is 2000-2079 + 80-99 is 1980-1999 */ if (result.modifiedTime.tm_year < 80) - result.modifiedTime.tm_year += 100; + result.modifiedTime.tm_year += 2000; + else if (result.modifiedTime.tm_year < 100) + result.modifiedTime.tm_year += 1900; } result.modifiedTime.tm_hour = atoi(tokens[1]+0); @@@@ -970,6 +1007,8 @@@@ FTPEntryType parseOneFTPLine(const char* * "drwxr-xr-x 2 0 0 512 May 28 22:17 etc" */ + bool isOldHellsoft = false; + if (numtoks >= 6) { /* there are two perm formats (Hellsoft/NetWare and *IX strmode(3)). @@@@ -995,6 +1034,8 @@@@ FTPEntryType parseOneFTPLine(const char* { /* rest is FMA[S] or AFM[S] */ lstyle = 'U'; /* very likely one of the NetWare servers */ + if (toklen[0] == 10) + isOldHellsoft = true; } } } @@@@ -1059,7 +1100,7 @@@@ FTPEntryType parseOneFTPLine(const char* /* check that size is numeric */ p = tokens[tokmarker]; - for (pos = 0; lstyle && pos < toklen[tokmarker]; pos++) + for (unsigned int i = 0; lstyle && i < toklen[tokmarker]; ++i) { if (!isASCIIDigit(*p++)) lstyle = 0; @@@@ -1068,11 +1109,11 @@@@ FTPEntryType parseOneFTPLine(const char* { month_num = 0; p = tokens[tokmarker+1]; - for (pos = 0;pos < (12*3); pos+=3) + for (unsigned int i = 0; i < (12*3); i+=3) { - if (p[0] == month_names[pos+0] && - p[1] == month_names[pos+1] && - p[2] == month_names[pos+2]) + if (p[0] == month_names[i+0] && + p[1] == month_names[i+1] && + p[2] == month_names[i+2]) break; month_num++; } @@@@ -1080,8 +1121,8 @@@@ FTPEntryType parseOneFTPLine(const char* lstyle = 0; } } /* relative position test */ - } /* while (pos+5) < numtoks */ - } /* if (numtoks >= 4) */ + } /* for (pos = (numtoks-5); !lstyle && pos > 1; pos--) */ + } /* if (lstyle == 'U') */ if (lstyle == 'U') { @@@@ -1140,24 +1181,49 @@@@ FTPEntryType parseOneFTPLine(const char* } /* time/year */ - result.filename = tokens[tokmarker+4]; - result.filenameLength = (&(line[linelen_sans_wsp])) + // there is exacly 1 space between filename and previous token in all + // outputs except old Hellsoft + if (!isOldHellsoft) + result.filename = tokens[tokmarker+3] + toklen[tokmarker+3] + 1; + else + result.filename = tokens[tokmarker+4]; + + result.filenameLength = (&(line[linelen])) - (result.filename); if (result.type == FTPLinkEntry && result.filenameLength > 4) { - p = result.filename + 1; - for (pos = 1; pos < (result.filenameLength - 4); pos++) - { - if (*p == ' ' && p[1] == '-' && p[2] == '>' && p[3] == ' ') - { - result.linkname = p + 4; - result.linknameLength = (&(line[linelen_sans_wsp])) - - (result.linkname); - result.filenameLength = pos; - break; - } - p++; + /* First try to use result.fe_size to find " -> " sequence. + This can give proper result for cases like "aaa -> bbb -> ccc". */ + unsigned int fileSize = result.fileSize.toUInt(); + + if (result.filenameLength > (fileSize + 4) && + strncmp(result.filename + result.filenameLength - fileSize - 4, " -> ", 4) == 0) + { + result.linkname = result.filename + (result.filenameLength - fileSize); + result.linknameLength = (&(line[linelen])) - (result.linkname); + result.filenameLength -= fileSize + 4; + } + else + { + /* Search for sequence " -> " from the end for case when there are + more occurrences. F.e. if ftpd returns "a -> b -> c" assume + "a -> b" as a name. Powerusers can remove unnecessary parts + manually but there is no way to follow the link when some + essential part is missing. */ + p = result.filename + (result.filenameLength - 5); + for (pos = (result.filenameLength - 5); pos > 0; pos--) + { + if (strncmp(p, " -> ", 4) == 0) + { + result.linkname = p + 4; + result.linknameLength = (&(line[linelen])) + - (result.linkname); + result.filenameLength = pos; + break; + } + p--; + } } } @@@@ -1614,9 +1680,7 @@@@ FTPEntryType parseOneFTPLine(const char* } /* if (linelen > 0) */ - if (state.parsedOne || state.listStyle) /* junk if we fail to parse */ - return FTPJunkEntry; /* this time but had previously parsed sucessfully */ - return FTPMiscEntry; /* its part of a comment or error message */ + return ParsingFailed(state); } } // namespace WebCore @ 1.1 log @ass patches from webkit CVS to fix security problems (CVE-2009-2816, CVE-2009-3384), bump PKGREVISION @ text @d1 1 a1 1 $NetBSD$ @