diff --git a/gnu/local.mk b/gnu/local.mk index 45a4009859..7d14f8c842 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -797,6 +797,8 @@ dist_patch_DATA = \ %D%/packages/patches/soprano-find-clucene.patch \ %D%/packages/patches/steghide-fixes.patch \ %D%/packages/patches/superlu-dist-scotchmetis.patch \ + %D%/packages/patches/swish-e-search.patch \ + %D%/packages/patches/swish-e-format-security.patch \ %D%/packages/patches/synfig-build-fix.patch \ %D%/packages/patches/t1lib-CVE-2010-2642.patch \ %D%/packages/patches/t1lib-CVE-2011-0764.patch \ diff --git a/gnu/packages/patches/swish-e-format-security.patch b/gnu/packages/patches/swish-e-format-security.patch new file mode 100644 index 0000000000..be9d7cb8a9 --- /dev/null +++ b/gnu/packages/patches/swish-e-format-security.patch @@ -0,0 +1,33 @@ +Borrowed from Debian. + +--- swish-e-2.4.7/src/parser.c 2009-04-05 03:58:32.000000000 +0200 ++++ swish-e-2.4.7/src/parser.c 2013-06-11 13:53:08.196559035 +0200 +@@ -1760,7 +1760,7 @@ + va_start(args, msg); + vsnprintf(str, 1000, msg, args ); + va_end(args); +- xmlParserError(parse_data->ctxt, str); ++ xmlParserError(parse_data->ctxt, "%s", str); + } + + static void warning(void *data, const char *msg, ...) +@@ -1772,7 +1772,7 @@ + va_start(args, msg); + vsnprintf(str, 1000, msg, args ); + va_end(args); +- xmlParserWarning(parse_data->ctxt, str); ++ xmlParserWarning(parse_data->ctxt, "%s", str); + } + + +--- swish-e-2.4.7/src/result_output.c 2009-04-05 03:58:32.000000000 +0200 ++++ swish-e-2.4.7/src/result_output.c 2013-06-11 13:53:38.593550825 +0200 +@@ -752,7 +752,7 @@ + s = (char *) emalloc(MAXWORDLEN + 1); + n = strftime(s, (size_t) MAXWORDLEN, fmt, localtime(&(pv->value.v_date))); + if (n && f) +- fprintf(f, s); ++ fprintf(f, "%s", s); + efree(s); + } + break; diff --git a/gnu/packages/patches/swish-e-search.patch b/gnu/packages/patches/swish-e-search.patch new file mode 100644 index 0000000000..2a57a31a08 --- /dev/null +++ b/gnu/packages/patches/swish-e-search.patch @@ -0,0 +1,43 @@ +From http://swish-e.org/archive/2015-09/13295.html + +--- a/src/compress.c ++++ a/src/compress.c +@@ -995,7 +995,7 @@ void remove_worddata_longs(unsigned char *worddata,int *sz_worddata) + progerr("Internal error in remove_worddata_longs"); + + /* dst may be smaller than src. So move the data */ +- memcpy(dst,src,data_len); ++ memmove(dst,src,data_len); + + /* Increase pointers */ + src += data_len; +--- a/src/headers.c ++++ a/src/headers.c +@@ -280,7 +280,7 @@ static SWISH_HEADER_VALUE fetch_single_header( IndexFILE *indexf, HEADER_MAP *he + + case SWISH_NUMBER: + case SWISH_BOOL: +- value.number = *(unsigned long *) data_pointer; ++ value.number = *(unsigned int *) data_pointer; + + /* $$$ Ugly hack alert! */ + /* correct for removed files */ +--- a/src/swishspider ++++ a/src/swishspider +@@ -27,6 +27,7 @@ use LWP::UserAgent; + use HTTP::Status; + use HTML::Parser 3.00; + use HTML::LinkExtor; ++use Encode; + + if (scalar(@ARGV) != 2) { + print STDERR "Usage: $0 localpath url\n"; +@@ -94,7 +95,7 @@ use HTML::LinkExtor; + # Don't allow links above the base + $URI::ABS_REMOTE_LEADING_DOTS = 1; + +- $p->parse( $$content_ref ); ++ $p->parse( decode_utf8 $$content_ref ); + close( LINKS ); + + exit; diff --git a/gnu/packages/search.scm b/gnu/packages/search.scm index 9a7bc76463..60f902f96a 100644 --- a/gnu/packages/search.scm +++ b/gnu/packages/search.scm @@ -23,10 +23,14 @@ (define-module (gnu packages search) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system gnu) + #:use-module (gnu packages) #:use-module (gnu packages compression) #:use-module (gnu packages check) #:use-module (gnu packages databases) - #:use-module (gnu packages linux)) + #:use-module (gnu packages linux) + #:use-module (gnu packages perl) + #:use-module (gnu packages web) + #:use-module (gnu packages xml)) (define-public xapian (package @@ -171,4 +175,65 @@ (define-public mlocate conflict with slocate compatibility.") (license gpl2))) +(define-public swish-e + (package + (name "swish-e") + (version "2.4.7") + (source (origin + (method url-fetch) + (uri (list (string-append "http://swish-e.org/distribution/" + "swish-e-" version ".tar.gz") + ;; The upstream swish-e.org appears to be down... so + ;; use debian's copy as a fallback. + (string-append "http://http.debian.net/debian/pool/" + "main/s/swish-e/swish-e_" version + ".orig.tar.gz"))) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0qkrk7z25yp9hynj21vxkyn7yi8gcagcfxnass5cgczcz0gm9pax")) + (patches (search-patches "swish-e-search.patch" + "swish-e-format-security.patch")))) + (build-system gnu-build-system) + ;; Several other packages and perl modules may be installed alongside + ;; swish-e to extend its features at runtime, but are not required for + ;; building: xpdf, catdoc, MP3::Tag, Spreadsheet::ParseExcel, + ;; HTML::Entities. + (inputs + `(("libxml" ,libxml2) + ("zlib" ,zlib) + ("perl" ,perl) + ("perl-uri" ,perl-uri) + ("perl-html-parser" ,perl-html-parser) + ("perl-html-tagset" ,perl-html-tagset) + ("perl-mime-types" ,perl-mime-types))) + (arguments + `(#:phases (modify-phases %standard-phases + (add-after 'install 'wrap-programs + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out"))) + (for-each + (lambda (program) + (wrap-program program + `("PERL5LIB" ":" prefix + ,(map (lambda (i) + (string-append (assoc-ref inputs i) + "/lib/perl5/site_perl")) + ;; These perl modules have no propagated + ;; inputs, so no further analysis needed. + '("perl-uri" + "perl-html-parser" + "perl-html-tagset" + "perl-mime-types"))))) + (list (string-append out "/lib/swish-e/swishspider") + (string-append out "/bin/swish-filter-test"))) + #t)))))) + (home-page "http://swish-e.org") + (synopsis "Web indexing system") + (description + "Swish-e is Simple Web Indexing System for Humans - Enhanced. Swish-e +can quickly and easily index directories of files or remote web sites and +search the generated indexes.") + (license gpl2+))) ;with exception + ;;; search.scm ends here