pkgsrc-WIP-changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
pan2-git: small update
Module Name: pkgsrc-wip
Committed By: Olaf Seibert <rhialto%falu.nl@localhost>
Pushed By: rhialto
Date: Fri Apr 3 20:09:45 2020 +0200
Changeset: d6f3bce94f2b5bf31bb788f83c5696276a739237
Modified Files:
pan2-git/Makefile
pan2-git/distinfo
Added Files:
pan2-git/patches/patch-filenames
Log Message:
pan2-git: small update
To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=d6f3bce94f2b5bf31bb788f83c5696276a739237
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
diffstat:
pan2-git/Makefile | 6 +
pan2-git/distinfo | 1 +
pan2-git/patches/patch-filenames | 278 +++++++++++++++++++++++++++++++++++++++
3 files changed, 285 insertions(+)
diffs:
diff --git a/pan2-git/Makefile b/pan2-git/Makefile
index 600fcc46f2..96457aa740 100644
--- a/pan2-git/Makefile
+++ b/pan2-git/Makefile
@@ -20,6 +20,10 @@ USE_PKGLOCALEDIR= yes
GNU_CONFIGURE= yes
CONFIGURE_ARGS+= --with-gnutls
+CONFIGURE_ENV+= MSGCONV=${PREFIX}/bin/msgconv
+CONFIGURE_ENV+= MSGMERGE=${PREFIX}/bin/msgmerge
+CONFIGURE_ENV+= MSGINIT=${PREFIX}/bin/msginit
+
pre-configure:
cd ${WRKSRC} && autoreconf -fiv
@@ -29,9 +33,11 @@ pre-configure:
.include "../../devel/gettext-lib/buildlink3.mk"
.include "../../devel/pcre/buildlink3.mk"
.include "../../devel/zlib/buildlink3.mk"
+.include "../../graphics/hicolor-icon-theme/buildlink3.mk"
.include "../../mail/gmime/buildlink3.mk"
.include "../../security/gnutls/buildlink3.mk" # optional
.include "../../sysutils/desktop-file-utils/desktopdb.mk"
.include "../../textproc/gtkspell/buildlink3.mk" # optional
+.include "../../textproc/enchant/buildlink3.mk" # optional; why not pulled in by gtkspell?
.include "../../wip/mk/git-package.mk"
.include "../../mk/bsd.pkg.mk"
diff --git a/pan2-git/distinfo b/pan2-git/distinfo
index 97385b6a7e..3d1891dd0c 100644
--- a/pan2-git/distinfo
+++ b/pan2-git/distinfo
@@ -1,4 +1,5 @@
$NetBSD$
SHA1 (patch-configure.ac) = e71544a02c6c3fa09fe79f78eb39ebd31e0d8a3c
+SHA1 (patch-filenames) = e68d7cd688a5b80a515cbe8e93e5bc4f5204033c
SHA1 (patch-pan-general-e-util.cc) = c252f074b139b100f3f879261b1ba894b5f3350c
diff --git a/pan2-git/patches/patch-filenames b/pan2-git/patches/patch-filenames
new file mode 100644
index 0000000000..bd3dd0a815
--- /dev/null
+++ b/pan2-git/patches/patch-filenames
@@ -0,0 +1,278 @@
+diff --git a/pan/tasks/decoder.cc b/pan/tasks/decoder.cc
+index b4c21ae..04ea40a 100644
+--- pan/tasks/decoder.cc
++++ pan/tasks/decoder.cc
+@@ -61,7 +61,8 @@ Decoder :: enqueue (TaskArticle * task,
+ const strings_t & input_files,
+ const TaskArticle::SaveMode & save_mode,
+ const TaskArticle::SaveOptions & options,
+- const StringView & filename)
++ const StringView & filename,
++ const Article & article)
+ {
+ disable_progress_update ();
+
+@@ -71,6 +72,7 @@ Decoder :: enqueue (TaskArticle * task,
+ this->save_mode = save_mode;
+ this->options = options;
+ this->attachment_filename = filename;
++ this->article_subject = article.subject;
+
+ mark_read = false;
+
+@@ -149,7 +151,12 @@ Decoder :: do_work()
+ {
+
+ if (was_cancelled()) break;
+- if ((res = UULoadFileWithPartNo (const_cast<char*>(it->c_str()), 0, 0, ++i)) != UURET_OK) {
++ const char *global_subject = NULL;
++ // In SAVE_ALL mode, article_subject is the subject from the NZB file, if known
++ if (options == TaskArticle::SAVE_ALL && !article_subject.empty()) {
++ global_subject = article_subject.c_str();
++ }
++ if ((res = UULoadFileWithPartNo (const_cast<char*>(it->c_str()), 0, 0, ++i, global_subject)) != UURET_OK) {
+ g_snprintf(buf, bufsz,
+ _("Error reading from %s: %s"),
+ it->c_str(),
+@@ -171,8 +178,8 @@ Decoder :: do_work()
+ {
+ // skip all other attachments in SAVE_AS mode (single attachment download)
+ /// DBG why is this failing if article isn't cached????
+- if (!attachment_filename.empty())
+- if(strcmp(item->filename, attachment_filename.str) != 0 && options == TaskArticle::SAVE_AS) continue;
++ if (options == TaskArticle::SAVE_AS && !attachment_filename.empty())
++ if(strcmp(item->filename, attachment_filename.str) != 0) continue;
+
+ file_errors.clear ();
+
+diff --git a/pan/tasks/decoder.h b/pan/tasks/decoder.h
+index 74403c1..c0cff51 100644
+--- pan/tasks/decoder.h
++++ pan/tasks/decoder.h
+@@ -61,7 +61,8 @@ namespace pan
+ const strings_t & input_files,
+ const TaskArticle::SaveMode & save_mode,
+ const TaskArticle::SaveOptions & options,
+- const StringView & filename);
++ const StringView & filename,
++ const Article & article);
+
+ public:
+
+@@ -82,6 +83,7 @@ namespace pan
+ TaskArticle::SaveMode save_mode;
+ TaskArticle::SaveOptions options;
+ StringView attachment_filename;
++ Quark article_subject;
+
+ // These are set in the worker thread and polled in the main thread.
+ Mutex mut;
+diff --git a/pan/tasks/task-article.cc b/pan/tasks/task-article.cc
+index 9c96b7d..beaed60 100644
+--- pan/tasks/task-article.cc
++++ pan/tasks/task-article.cc
+@@ -350,7 +350,7 @@ TaskArticle :: use_decoder (Decoder* decoder)
+ _state.set_working();
+ const Article::mid_sequence_t mids (_article.get_part_mids());
+ ArticleCache :: strings_t filenames (_cache.get_filenames (mids));
+- _decoder->enqueue (this, _save_path, filenames, _save_mode, _options, _attachment);
++ _decoder->enqueue (this, _save_path, filenames, _save_mode, _options, _attachment, _article);
+ set_status_va (_("Decoding %s"), _article.subject.c_str());
+ debug ("decoder thread was free, enqueued work");
+ }
+diff --git a/uulib/uucheck.c b/uulib/uucheck.c
+index 98cb8e0..0f128d0 100644
+--- uulib/uucheck.c
++++ uulib/uucheck.c
+@@ -86,6 +86,12 @@ static char *nofname = "UNKNOWN";
+
+ static char *fnchars = "._-~!";
+
++/*
++ * special characters we forbid a quoted filename to have
++ */
++
++static char *fnqchars = "/:\\\"";
++
+ /*
+ * Policy for extracting a part number from the subject line.
+ * usually, look for part numbers in () brackets first, then in []
+@@ -148,23 +154,27 @@ UUGetFileName (char *subject, char *ptonum, char *ptonend)
+ }
+
+ /*
+- * If the file was encoded by uuenview, then the filename is enclosed
+- * in [brackets]. But check what's inside these bracket's, try not to
+- * fall for something other than a filename
++ * Try try to find a file name between quotes.
++ * With yEnc this format is compulsory.
+ */
+
+ ptr = subject;
+- while ((iter = strchr (ptr, '[')) != NULL) {
+- if (strchr (iter, ']') == NULL) {
++ while ((iter = strchr (ptr, '"')) != NULL) {
++ /* Don't overlap the sequence number */
++ if (ptonum && ptonend && iter >= ptonum && iter <= ptonend) {
+ ptr = iter + 1;
+ continue;
+ }
+ iter++;
++ if (strchr (iter, '"') == NULL) {
++ ptr = iter + 1;
++ continue;
++ }
+ while (isspace (*iter))
+ iter++;
+ count = length = alflag = 0;
+ while (iter[count] &&
+- (isalnum (iter[count]) || strchr (fnchars, iter[count])!=NULL)) {
++ (strchr (fnqchars, iter[count])==NULL)) {
+ if (isalpha (iter[count]))
+ alflag++;
+ count++;
+@@ -173,10 +183,15 @@ UUGetFileName (char *subject, char *ptonum, char *ptonend)
+ ptr = iter + 1;
+ continue;
+ }
++ /* Don't overlap the sequence number */
++ if (ptonum && ptonend && iter+count >= ptonum && iter+count <= ptonend) {
++ ptr = iter + 1;
++ continue;
++ }
+ length = count;
+ while (isspace (iter[count]))
+ count++;
+- if (iter[count] == ']') {
++ if (iter[count] == '"') {
+ ptr = iter;
+ break;
+ }
+@@ -184,6 +199,46 @@ UUGetFileName (char *subject, char *ptonum, char *ptonend)
+ ptr = iter + 1;
+ }
+
++
++ /*
++ * If the file was encoded by uuenview, then the filename is enclosed
++ * in [brackets]. But check what's inside these bracket's, try not to
++ * fall for something other than a filename
++ */
++
++ if (length == 0) {
++ ptr = subject;
++ while ((iter = strchr (ptr, '[')) != NULL) {
++ if (strchr (iter, ']') == NULL) {
++ ptr = iter + 1;
++ continue;
++ }
++ iter++;
++ while (isspace (*iter))
++ iter++;
++ count = length = alflag = 0;
++ while (iter[count] &&
++ (isalnum (iter[count]) || iter[count] == ' ' || strchr (fnchars, iter[count])!=NULL)) {
++ if (isalpha (iter[count]))
++ alflag++;
++ count++;
++ }
++ if (count<4 || alflag==0) {
++ ptr = iter + 1;
++ continue;
++ }
++ length = count;
++ while (isspace (iter[count]))
++ count++;
++ if (iter[count] == ']') {
++ ptr = iter;
++ break;
++ }
++ length = 0;
++ ptr = iter + 1;
++ }
++ }
++
+ /*
+ * new filename detection routine, fists mostly for files by ftp-by-email
+ * servers that create subject lines with ftp.host.address:/full/path/file
+diff --git a/uulib/uudeview.h b/uulib/uudeview.h
+index 753279d..16ad363 100644
+--- uulib/uudeview.h
++++ uulib/uudeview.h
+@@ -206,7 +206,7 @@ int UUEXPORT UUSetFNameFilter _ANSI_ARGS_((void *,
+ char *)));
+ char * UUEXPORT UUFNameFilter _ANSI_ARGS_((char *));
+ int UUEXPORT UULoadFile _ANSI_ARGS_((char *, char *, int));
+-int UUEXPORT UULoadFileWithPartNo _ANSI_ARGS_((char *, char *, int, int));
++int UUEXPORT UULoadFileWithPartNo _ANSI_ARGS_((char *, char *, int, int, const char *));
+ uulist *UUEXPORT UUGetFileListItem _ANSI_ARGS_((int));
+ int UUEXPORT UURenameFile _ANSI_ARGS_((uulist *, char *));
+ int UUEXPORT UUDecodeToTemp _ANSI_ARGS_((uulist *));
+diff --git a/uulib/uulib.c b/uulib/uulib.c
+index 2d6816d..1286f43 100644
+--- uulib/uulib.c
++++ uulib/uulib.c
+@@ -655,11 +655,11 @@ UUFNameFilter (char *fname)
+ int UUEXPORT
+ UULoadFile (char *filename, char *fileid, int delflag)
+ {
+- return UULoadFileWithPartNo(filename, fileid, delflag, -1);
++ return UULoadFileWithPartNo(filename, fileid, delflag, -1, NULL);
+ }
+
+ int UUEXPORT
+-UULoadFileWithPartNo (char *filename, char *fileid, int delflag, int partno)
++UULoadFileWithPartNo (char *filename, char *fileid, int delflag, int partno, const char *global_subject)
+ {
+ int res, sr, count=0;
+ struct stat finfo;
+@@ -667,6 +667,7 @@ UULoadFileWithPartNo (char *filename, char *fileid, int delflag, int partno)
+ uufile *fload;
+ itbd *killem;
+ FILE *datei;
++ int overridden_subject;
+
+ if ((datei = fopen (filename, "rb")) == NULL) {
+ UUMessage (uulib_id, __LINE__, UUMSG_ERROR,
+@@ -779,6 +780,23 @@ UULoadFileWithPartNo (char *filename, char *fileid, int delflag, int partno)
+ continue;
+ }
+
++ if (partno != -1 && global_subject &&
++ loaded->uudet == YENC_ENCODED && /* only yEnc has a filename in each part */
++ (loaded->subject && loaded->filename &&
++ strstr(loaded->subject, loaded->filename) == NULL)) {
++ /*
++ * Sometimes articles derived from an NZB file have corrupt Subject: lines.
++ * That also makes that UUInsertPartToList() fails to combine files properly.
++ * We detect this situation by checking if the filename from the
++ * part can be found in the Subject: header.
++ */
++ _FP_free(loaded->subject);
++ loaded->subject = _FP_strdup((char *)global_subject);
++ overridden_subject = 1;
++ } else {
++ overridden_subject = 0;
++ }
++
+ if ((fload = UUPreProcessPart (loaded, &res)) == NULL) {
+ /*
+ * no useful data found
+@@ -793,6 +811,17 @@ UULoadFileWithPartNo (char *filename, char *fileid, int delflag, int partno)
+ continue;
+ }
+
++ if (overridden_subject) {
++ /*
++ * If the yEnc file gives a different file name than the subject,
++ * this is a security risk.
++ *
++ * Override the part file name with the one derived from the global subject.
++ */
++ _FP_free(fload->filename);
++ fload->filename = _FP_strdup(fload->subfname);
++ }
++
+ if ((loaded->subject && *(loaded->subject)) ||
+ (loaded->mimeid && *(loaded->mimeid)) ||
+ (loaded->filename&& *(loaded->filename))||
Home |
Main Index |
Thread Index |
Old Index