mirror of
https://github.com/xroche/httrack.git
synced 2026-07-24 01:29:49 +03:00
Compare commits
3 Commits
export-con
...
drop-swf-j
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
48c4e57a4e | ||
|
|
84ba3044f7 | ||
|
|
f73b352b82 |
1
README
1
README
@@ -40,7 +40,6 @@ These are the principals limits of HTTrack for that moment. Note that we did not
|
||||
that would have solved them.
|
||||
|
||||
- Several scripts generating complex filenames may not find them (ex: img.src='image'+a+Mobj.dst+'.gif')
|
||||
- Some java classes may not find some files on them (class included)
|
||||
- Cgi-bin links may not work properly in some cases (parameters needed). To avoid them: use filters like -*cgi-bin*
|
||||
|
||||
|
||||
|
||||
14
configure.ac
14
configure.ac
@@ -64,16 +64,6 @@ AC_SUBST(LT_CV_OBJDIR,$lt_cv_objdir)
|
||||
# Export version info
|
||||
AC_SUBST(VERSION_INFO)
|
||||
|
||||
# Versioned plugin name for dlopen() in hts_create_opt(); soname major is
|
||||
# libtool's current - age, so this tracks VERSION_INFO bumps automatically.
|
||||
HTS_SONAME_MAJOR=$((${VERSION_INFO%%:*} - ${VERSION_INFO##*:}))
|
||||
case "$host_os" in
|
||||
darwin*) HTS_LIBHTSJAVA_NAME="libhtsjava.$HTS_SONAME_MAJOR.dylib" ;;
|
||||
*) HTS_LIBHTSJAVA_NAME="libhtsjava.so.$HTS_SONAME_MAJOR" ;;
|
||||
esac
|
||||
AC_DEFINE_UNQUOTED([HTS_LIBHTSJAVA_NAME], ["$HTS_LIBHTSJAVA_NAME"],
|
||||
[Versioned libhtsjava runtime name, derived from VERSION_INFO])
|
||||
|
||||
### Default CFLAGS
|
||||
DEFAULT_CFLAGS="-Wall -Wformat -Wformat-security \
|
||||
-Wmultichar -Wwrite-strings -Wcast-qual -Wcast-align \
|
||||
@@ -119,8 +109,8 @@ case "$CFLAGS" in
|
||||
esac
|
||||
|
||||
# Force libc back into DT_NEEDED for libraries that reach it only through
|
||||
# libhttrack (libhtsjava, the libtest callbacks), but only with a GNU-style
|
||||
# linker; Apple ld rejects these flags and links libSystem unconditionally.
|
||||
# libhttrack (the libtest callbacks), but only with a GNU-style linker; Apple
|
||||
# ld rejects these flags and links libSystem unconditionally.
|
||||
AX_CHECK_LINK_FLAG([-Wl,--push-state,--no-as-needed,-lc,--pop-state],
|
||||
[LIBC_FORCE_LINK="-Wl,--push-state,--no-as-needed,-lc,--pop-state"])
|
||||
AC_SUBST([LIBC_FORCE_LINK])
|
||||
|
||||
5
debian/copyright
vendored
5
debian/copyright
vendored
@@ -7,9 +7,8 @@ Files: *
|
||||
Copyright: 1998-2026 Xavier Roche and other contributors
|
||||
License: GPL-3+
|
||||
Comment:
|
||||
The engine includes contributions from Yann Philippot (src/htsjava.c,
|
||||
src/htsjava.h). htsbasenet.h links against the system OpenSSL library
|
||||
(originally by Eric Young); no OpenSSL/SSLeay code is bundled here.
|
||||
htsbasenet.h links against the system OpenSSL library (originally by Eric
|
||||
Young); no OpenSSL/SSLeay code is bundled here.
|
||||
|
||||
Files: src/minizip/*
|
||||
Copyright: 1998-2010 Gilles Vollant
|
||||
|
||||
1
debian/libhttrack-dev.files
vendored
1
debian/libhttrack-dev.files
vendored
@@ -1,5 +1,4 @@
|
||||
usr/include/httrack
|
||||
usr/lib/*/libhttrack.{so}
|
||||
usr/lib/*/libhtsjava.{so}
|
||||
usr/share/httrack/libtest
|
||||
usr/lib/*/httrack/libtest
|
||||
|
||||
1
debian/libhttrack3.files
vendored
1
debian/libhttrack3.files
vendored
@@ -1,3 +1,2 @@
|
||||
usr/lib/*/libhttrack.so.3*
|
||||
usr/lib/*/libhtsjava.so.3*
|
||||
usr/share/httrack/templates
|
||||
|
||||
@@ -609,10 +609,9 @@ most mirrors do work. We still are working to improve the mirror quality of HTTr
|
||||
<br>
|
||||
|
||||
</a><a NAME="Q2b">Q: <strong>Some Java applets do not work properly!</strong><br>
|
||||
A: <em>Java applets may not work in some cases, for example if HTTrack failed to detect all included classes
|
||||
or files called within the class file. Sometimes, Java applets need to be online, because remote files are
|
||||
directly caught. Finally, the site structure can be incompatible with the class (always try to keep the original site structure
|
||||
when you want to get Java classes)<br>
|
||||
A: <em>Java applets may not work in some cases, because HTTrack does not parse compiled class files to find
|
||||
the resources they load. Java applets often need to be online anyway, since remote files are fetched directly
|
||||
at runtime.<br>
|
||||
If there is no way to make some classes work properly, you can exclude them with the filters.
|
||||
They will be available, but only online.
|
||||
</em>
|
||||
|
||||
@@ -243,7 +243,7 @@ Build options:
|
||||
Spider options:
|
||||
bN accept cookies in cookies.txt (0=do not accept,* 1=accept) (--cookies[=N])
|
||||
u check document type if unknown (cgi,asp..) (u0 don't check, * u1 check but /, u2 check always) (--check-type[=N])
|
||||
j *parse Java Classes (j0 don't parse) (--parse-java[=N])
|
||||
j *parse scripts (j0 don't parse) (--parse-java[=N])
|
||||
sN follow robots.txt and meta robots tags (0=never,1=sometimes,* 2=always) (--robots[=N])
|
||||
%h force HTTP/1.0 requests (reduce update features, only for old servers or proxies) (--http-10)
|
||||
%B tolerant requests (accept bogus responses on some servers, but not standard!) (--tolerant)
|
||||
@@ -417,7 +417,7 @@ site. Specifically, the defauls are:
|
||||
X *purge old files after update (X0 keep delete)
|
||||
bN accept cookies in cookies.txt (0=do not accept,* 1=accept)
|
||||
u check document type if unknown (cgi,asp..) (u0 don't check, * u1 check but /, u2 check always)
|
||||
j *parse Java Classes (j0 don't parse)
|
||||
j *parse scripts (j0 don't parse)
|
||||
sN follow robots.txt and meta robots tags (0=never,1=sometimes,* 2=always)
|
||||
C create/use a cache for updates and retries (C0 no cache,C1 cache is prioritary,* C2 test update before)
|
||||
f *log file mode
|
||||
@@ -497,9 +497,9 @@ about your browser retaining them.
|
||||
<p align=justify> This causes different document types to be analyzed
|
||||
differently.
|
||||
|
||||
<pre><b><i> j *parse Java Classes (j0 don't parse) </i></b></pre>
|
||||
<pre><b><i> j *parse scripts (j0 don't parse) </i></b></pre>
|
||||
|
||||
<p align=justify> This causes Java class files to be parsed looking for
|
||||
<p align=justify> This causes scripts to be parsed looking for
|
||||
URLs.
|
||||
|
||||
<pre><b><i> sN follow robots.txt and meta robots tags (0=never,1=sometimes,* 2=always) </i></b></pre>
|
||||
@@ -1178,7 +1178,7 @@ accepted and sent back in order to allow access.
|
||||
Spider options:
|
||||
bN accept cookies in cookies.txt (0=do not accept,* 1=accept)
|
||||
u check document type if unknown (cgi,asp..) (u0 don't check, * u1 check but /, u2 check always)
|
||||
j *parse Java Classes (j0 don't parse)
|
||||
j *parse scripts (j0 don't parse)
|
||||
sN follow robots.txt and meta robots tags (0=never,1=sometimes,* 2=always)
|
||||
%h force HTTP/1.0 requests (reduce update features, only for old servers or proxies)
|
||||
%B tolerant requests (accept bogus responses on some servers, but not standard!)
|
||||
@@ -2451,12 +2451,10 @@ work. We still are working to improve the mirror quality of HTTrack.
|
||||
|
||||
<p align=justify><b>Q: Some Java applets do not work properly! </b>
|
||||
|
||||
<p align=justify> A: Java applets may not work in some cases, for
|
||||
example if HTTrack failed to detect all included classes or files called
|
||||
within the class file. Sometimes, Java applets need to be online,
|
||||
because remote files are directly caught. Finally, the site structure
|
||||
can be incompatible with the class (always try to keep the original site
|
||||
structure when you want to get Java classes)
|
||||
<p align=justify> A: Java applets may not work in some cases, because
|
||||
HTTrack does not parse compiled class files to find the resources they
|
||||
load. Java applets often need to be online anyway, since remote files
|
||||
are fetched directly at runtime.
|
||||
|
||||
<p align=justify> If there is no way to make some classes work properly,
|
||||
you can exclude them with the filters. They will be available, but only
|
||||
|
||||
@@ -764,9 +764,9 @@ check, * u1 check but /, u2 check always)
|
||||
<td width="78%">
|
||||
|
||||
|
||||
<p>*parse Java Classes (j0 don t parse, bitmask: |1 parse
|
||||
default, |2 don t parse .class |4 don t parse .js |8 don t
|
||||
be aggressive) (--parse-java[=N])</p></td></tr>
|
||||
<p>*parse scripts (j0 don t parse, bitmask: |1 parse
|
||||
default, |4 don t parse .js |8 don t be aggressive)
|
||||
(--parse-java[=N])</p></td></tr>
|
||||
<tr valign="top" align="left">
|
||||
<td width="11%"></td>
|
||||
<td width="6%">
|
||||
@@ -889,8 +889,8 @@ only) (--protocol[=N])</p></td></tr>
|
||||
<td width="78%">
|
||||
|
||||
|
||||
<p>disable a specific external mime module (-%w htsswf -%w
|
||||
htsjava) (--disable-module <param>)</p></td></tr>
|
||||
<p>disable a specific external mime module (-%w
|
||||
httrack-plugin) (--disable-module <param>)</p></td></tr>
|
||||
</table>
|
||||
|
||||
<p style="margin-left:11%; margin-top: 1em"><b>Browser
|
||||
@@ -2175,10 +2175,6 @@ Several scripts generating complex filenames may not find
|
||||
them (ex:
|
||||
img.src=’image’+a+Mobj.dst+’.gif’)</small></p>
|
||||
|
||||
<p style="margin-left:11%; margin-top: 1em"><small>- Some
|
||||
java classes may not find some files on them (class
|
||||
included)</small></p>
|
||||
|
||||
<p style="margin-left:11%; margin-top: 1em"><small>-
|
||||
Cgi-bin links may not work properly in some cases
|
||||
(parameters needed). To avoid them: use filters like
|
||||
|
||||
@@ -288,8 +288,8 @@ This option define whether the engine has to abandon a host if a timeout/"too sl
|
||||
&P extended parsing, attempt to parse all links (even in unknown tags or Javascript)
|
||||
This option activates the extended parsing, that attempt to find links in unknown Html code/javascript
|
||||
|
||||
j *parse Java Classes (j0 don't parse)
|
||||
This option define whether the engine has to parse java files or not to catch included files
|
||||
j *parse scripts (j0 don't parse)
|
||||
This option defines whether the engine has to parse scripts or not to catch included files
|
||||
|
||||
I *make an index (I0 don't make)
|
||||
This option define whether the engine has to generate an index.html on the top directory
|
||||
|
||||
@@ -126,7 +126,6 @@ Note: the <i>Initialization</i>, <i>Main functions</i>, <i>Options handling</i>
|
||||
<li>the <tt>htsdefines.h</tt> prototype file, which describes callback function prototypes</li>
|
||||
<li>the <tt>htsopt.h</tt> prototype file, which describes the full httrackp* structure</li>
|
||||
<li>the <tt>callbacks-example*.c</tt> files given in the httrack archive</li>
|
||||
<li>the <tt>htsjava.c</tt> source file (the java class plugin ; overrides 'detect' and 'parse')</li>
|
||||
<li>the example given at the end of this document</li>
|
||||
</ul>
|
||||
|
||||
|
||||
@@ -118,8 +118,8 @@ h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
|
||||
<br>Avoid "never", because the local mirror could be bogus
|
||||
</small><br><br>
|
||||
<!-- -->
|
||||
<li>Parse java files</li>
|
||||
<br><small>Must the engine parse .java files (java classes) to seek included filenames?
|
||||
<li>Parse scripts</li>
|
||||
<br><small>Must the engine parse scripts to seek included filenames?
|
||||
<br>It is checked by default
|
||||
</small><br><br>
|
||||
<!-- -->
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
.\"
|
||||
.\" This file is generated by man/makeman.sh; do not edit by hand.
|
||||
.\" SPDX-License-Identifier: GPL-3.0-or-later
|
||||
.TH httrack 1 "07 July 2026" "httrack website copier"
|
||||
.TH httrack 1 "12 July 2026" "httrack website copier"
|
||||
.SH NAME
|
||||
httrack \- offline browser : copy websites to a local directory
|
||||
.SH SYNOPSIS
|
||||
@@ -224,7 +224,7 @@ explain which filter rule accepts or rejects a URL, then exit (\-\-why <param>)
|
||||
.IP \-u
|
||||
check document type if unknown (cgi,asp..) (u0 don't check, * u1 check but /, u2 check always) (\-\-check\-type[=N])
|
||||
.IP \-j
|
||||
*parse Java Classes (j0 don't parse, bitmask: |1 parse default, |2 don't parse .class |4 don't parse .js |8 don't be aggressive) (\-\-parse\-java[=N])
|
||||
*parse scripts (j0 don't parse, bitmask: |1 parse default, |4 don't parse .js |8 don't be aggressive) (\-\-parse\-java[=N])
|
||||
.IP \-sN
|
||||
follow robots.txt and meta robots tags (0=never,1=sometimes,* 2=always, 3=always (even strict rules)) (\-\-robots[=N])
|
||||
.IP \-%h
|
||||
@@ -248,7 +248,7 @@ can also be used to force a specific file type: \-\-assume foo.cgi=text/html
|
||||
.IP \-@iN
|
||||
internet protocol (0=both ipv6+ipv4, 4=ipv4 only, 6=ipv6 only) (\-\-protocol[=N])
|
||||
.IP \-%w
|
||||
disable a specific external mime module (\-%w htsswf \-%w htsjava) (\-\-disable\-module <param>)
|
||||
disable a specific external mime module (\-%w httrack\-plugin) (\-\-disable\-module <param>)
|
||||
.SS Browser ID:
|
||||
.IP \-F
|
||||
user\-agent field sent in HTTP headers (\-F "user\-agent name") (\-\-user\-agent <param>)
|
||||
@@ -514,8 +514,6 @@ that would have solved them.
|
||||
.SM
|
||||
\- Several scripts generating complex filenames may not find them (ex: img.src='image'+a+Mobj.dst+'.gif')
|
||||
.SM
|
||||
\- Some java classes may not find some files on them (class included)
|
||||
.SM
|
||||
\- Cgi\-bin links may not work properly in some cases (parameters needed). To avoid them: use filters like \-*cgi\-bin*
|
||||
.SH BUGS
|
||||
Please reports bugs to
|
||||
|
||||
@@ -44,7 +44,7 @@ httrack_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PIE)
|
||||
proxytrack_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PIE)
|
||||
htsserver_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PIE)
|
||||
|
||||
lib_LTLIBRARIES = libhttrack.la libhtsjava.la
|
||||
lib_LTLIBRARIES = libhttrack.la
|
||||
|
||||
htsserver_SOURCES = htsserver.c htsserver.h htsweb.c htsweb.h
|
||||
proxytrack_SOURCES = proxy/main.c \
|
||||
@@ -82,14 +82,6 @@ libhttrack_la_LIBADD = $(THREADS_LIBS) $(ZLIB_LIBS) $(OPENSSL_LIBS) $(DL_LIBS) $
|
||||
libhttrack_la_CFLAGS = $(AM_CFLAGS) -DLIBHTTRACK_EXPORTS -DZLIB_CONST
|
||||
libhttrack_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(VERSION_INFO)
|
||||
|
||||
libhtsjava_la_SOURCES = htsjava.c htsjava.h
|
||||
libhtsjava_la_LIBADD = $(THREADS_LIBS) $(DL_LIBS) libhttrack.la
|
||||
# This thin JNI wrapper reaches libc only through libhttrack, so the direct
|
||||
# libc edge is dropped from DT_NEEDED (library-not-linked-against-libc). Force
|
||||
# libc back as a dependency; configure gates the flag since only a GNU-style
|
||||
# linker accepts it (LIBC_FORCE_LINK is empty on e.g. macOS).
|
||||
libhtsjava_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(VERSION_INFO) $(LIBC_FORCE_LINK)
|
||||
|
||||
EXTRA_DIST = httrack.h webhttrack \
|
||||
coucal/murmurhash3.h.diff \
|
||||
coucal/murmurhash3.h.orig \
|
||||
@@ -119,7 +111,6 @@ EXTRA_DIST = httrack.h webhttrack \
|
||||
coucal/README.md \
|
||||
coucal/sample.c \
|
||||
coucal/tests.c \
|
||||
htsjava.vcproj \
|
||||
httrack.dsp httrack.dsw httrack.vcproj \
|
||||
libhttrack.dsp libhttrack.dsw libhttrack.vcproj \
|
||||
webhttrack.dsp webhttrack.dsw webhttrack.vcproj
|
||||
|
||||
@@ -3875,7 +3875,6 @@ void voidf(void) {
|
||||
a = "| HTTrack Website Copier |" CRLF;
|
||||
a = "|Code: Windows Interface Xavier Roche |" CRLF;
|
||||
a = "| HTS/HTTrack Xavier Roche |" CRLF;
|
||||
a = "| .class Parser Yann Philippot |" CRLF;
|
||||
a = "| |" CRLF;
|
||||
a = "|Tested on: Windows95,98,NT,2K |" CRLF;
|
||||
a = "| Linux PC |" CRLF;
|
||||
|
||||
@@ -1452,7 +1452,7 @@ static int hts_main_internal(int argc, char **argv, httrackp * opt) {
|
||||
if ((na + 1 >= argc) || (argv[na + 1][0] == '-')) {
|
||||
HTS_PANIC_PRINTF
|
||||
("Option %w needs to be followed by a blank space, and a module name");
|
||||
printf("Example: -%%w htsswf\n");
|
||||
printf("Example: -%%w httrack-plugin\n");
|
||||
htsmain_free();
|
||||
return -1;
|
||||
} else {
|
||||
|
||||
@@ -70,7 +70,7 @@ typedef struct t_hts_callbackarg t_hts_callbackarg;
|
||||
#endif
|
||||
|
||||
/* Marks a symbol an external wrapper module exports back to the engine.
|
||||
Must override -fvisibility=hidden on ELF, or dlopen()ed plugins (htsjava)
|
||||
Must override -fvisibility=hidden on ELF, or dlopen()ed plugins
|
||||
hide their own hts_plug()/hts_unplug() entry points. */
|
||||
#ifndef EXTERNAL_FUNCTION
|
||||
#ifdef _WIN32
|
||||
|
||||
@@ -546,8 +546,8 @@ void help(const char *app, int more) {
|
||||
infomsg(" %Y explain which filter rule accepts or rejects a URL, then exit");
|
||||
infomsg
|
||||
(" u check document type if unknown (cgi,asp..) (u0 don't check, * u1 check but /, u2 check always)");
|
||||
infomsg
|
||||
(" j *parse Java Classes (j0 don't parse, bitmask: |1 parse default, |2 don't parse .class |4 don't parse .js |8 don't be aggressive)");
|
||||
infomsg(" j *parse scripts (j0 don't parse, bitmask: |1 parse default, |4 "
|
||||
"don't parse .js |8 don't be aggressive)");
|
||||
infomsg
|
||||
(" sN follow robots.txt and meta robots tags (0=never,1=sometimes,* 2=always, 3=always (even strict rules))");
|
||||
infomsg
|
||||
@@ -571,8 +571,7 @@ void help(const char *app, int more) {
|
||||
(" can also be used to force a specific file type: --assume foo.cgi=text/html");
|
||||
infomsg
|
||||
(" @iN internet protocol (0=both ipv6+ipv4, 4=ipv4 only, 6=ipv6 only)");
|
||||
infomsg
|
||||
(" %w disable a specific external mime module (-%w htsswf -%w htsjava)");
|
||||
infomsg(" %w disable a specific external mime module (-%w httrack-plugin)");
|
||||
infomsg("");
|
||||
infomsg("Browser ID:");
|
||||
infomsg
|
||||
|
||||
517
src/htsjava.c
517
src/htsjava.c
@@ -1,517 +0,0 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998 Xavier Roche and other contributors
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Ethical use: we kindly ask that you NOT use this software to harvest email
|
||||
addresses or to collect any other private information about people. Doing so
|
||||
would dishonor our work and waste the many hours we have spent on it.
|
||||
|
||||
Please visit our Website: http://www.httrack.com
|
||||
*/
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
/* File: Java classes parser */
|
||||
/* Author: Yann Philippot */
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
/* Version: Oct/2000 */
|
||||
/* Fixed: problems with class structure (10/2000) */
|
||||
|
||||
// htsjava.c - Parseur de classes java
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#if ( defined(_WIN32) ||defined(HAVE_SYS_TYPES_H) )
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
/* Standard httrack module includes */
|
||||
#include "httrack-library.h"
|
||||
#include "htsopt.h"
|
||||
#include "htsdefines.h"
|
||||
|
||||
/* Module structures */
|
||||
#include "htsmodules.h"
|
||||
|
||||
/* We link to libhttrack, we can use its functions */
|
||||
#include "httrack-library.h"
|
||||
|
||||
/* This file */
|
||||
#include "htsjava.h"
|
||||
|
||||
/* calloct/freet wrappers */
|
||||
#include "htssafe.h"
|
||||
|
||||
static int reverse_endian(void) {
|
||||
int endian = 1;
|
||||
|
||||
return (*((char *) &endian) == 1);
|
||||
}
|
||||
|
||||
/* big/little endian swap */
|
||||
#define hts_swap16(A) ( (((A) & 0xFF)<<8) | (((A) & 0xFF00)>>8) )
|
||||
#define hts_swap32(A) ( (( (hts_swap16(A)) & 0xFFFF)<<16) | (( (hts_swap16(A>>16)) & 0xFFFF)) )
|
||||
|
||||
/* Static definitions */
|
||||
static RESP_STRUCT readtable(htsmoduleStruct * str, FILE * fp, RESP_STRUCT,
|
||||
int *);
|
||||
static unsigned short int readshort(FILE * fp);
|
||||
static int tris(httrackp * opt, char *);
|
||||
static char *printname(char[1024], char[1024]);
|
||||
|
||||
// ** HTS_xx sinon pas pris par VC++
|
||||
#define HTS_CLASS 7
|
||||
#define HTS_FIELDREF 9
|
||||
#define HTS_METHODREF 10
|
||||
#define HTS_STRING 8
|
||||
#define HTS_INTEGER 3
|
||||
#define HTS_FLOAT 4
|
||||
#define HTS_LONG 5
|
||||
#define HTS_DOUBLE 6
|
||||
#define HTS_INTERFACE 11
|
||||
#define HTS_NAMEANDTYPE 12
|
||||
#define HTS_ASCIZ 1
|
||||
#define HTS_UNICODE 2
|
||||
|
||||
#define JAVADEBUG 0
|
||||
|
||||
static const char *libName = "htsjava";
|
||||
|
||||
#ifdef _WIN32
|
||||
#define strcasecmp(a,b) stricmp(a,b)
|
||||
#define strncasecmp(a,b,n) strnicmp(a,b,n)
|
||||
#endif
|
||||
|
||||
static int detect_mime(htsmoduleStruct * str) {
|
||||
const char *savename = str->filename;
|
||||
|
||||
if (savename) {
|
||||
int len = (int) strlen(savename);
|
||||
|
||||
if (len > 6 && strcasecmp(savename + len - 6, ".class") == 0) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int hts_detect_java(t_hts_callbackarg * carg, httrackp * opt,
|
||||
htsmoduleStruct * str) {
|
||||
/* Call parent functions if multiple callbacks are chained. */
|
||||
if (CALLBACKARG_PREV_FUN(carg, detect) != NULL) {
|
||||
if (CALLBACKARG_PREV_FUN(carg, detect)
|
||||
(CALLBACKARG_PREV_CARG(carg), opt, str)) {
|
||||
return 1; /* Found before us, let them have the priority */
|
||||
}
|
||||
}
|
||||
|
||||
/* Check MIME */
|
||||
if (detect_mime(str)) {
|
||||
str->wrapper_name = libName; /* Our ID */
|
||||
return 1; /* Known format, we take it */
|
||||
}
|
||||
|
||||
return 0; /* Unknown format */
|
||||
}
|
||||
|
||||
static off_t fsize(const char *s) {
|
||||
STRUCT_STAT st;
|
||||
|
||||
if (STAT(s, &st) == 0 && S_ISREG(st.st_mode)) {
|
||||
return st.st_size;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
static int hts_parse_java(t_hts_callbackarg * carg, httrackp * opt,
|
||||
htsmoduleStruct * str) {
|
||||
/* The wrapper_name memebr has changed: not for us anymore */
|
||||
if (str->wrapper_name == NULL || strcmp(str->wrapper_name, libName) != 0) {
|
||||
/* Call parent functions if multiple callbacks are chained. */
|
||||
if (CALLBACKARG_PREV_FUN(carg, parse) != NULL) {
|
||||
return CALLBACKARG_PREV_FUN(carg, parse) (CALLBACKARG_PREV_CARG(carg),
|
||||
opt, str);
|
||||
}
|
||||
strcpy(str->err_msg,
|
||||
"unexpected error: bad wrapper_name and no previous wrapper");
|
||||
return 0; /* Unexpected error */
|
||||
} else {
|
||||
if (detect_mime(str)) {
|
||||
|
||||
/* (Legacy code) */
|
||||
char catbuff[CATBUFF_SIZE];
|
||||
FILE *fpout;
|
||||
JAVA_HEADER header;
|
||||
RESP_STRUCT *tab;
|
||||
const char *file = str->filename;
|
||||
|
||||
str->relativeToHtmlLink = 1;
|
||||
|
||||
#if JAVADEBUG
|
||||
printf("fopen\n");
|
||||
#endif
|
||||
if ((fpout = FOPEN(fconv(catbuff, sizeof(catbuff), file), "r+b")) ==
|
||||
NULL) {
|
||||
sprintf(str->err_msg, "Unable to open file %s", file);
|
||||
return 0; // une erreur..
|
||||
}
|
||||
#if JAVADEBUG
|
||||
printf("fread\n");
|
||||
#endif
|
||||
if (fread(&header, 1, 10, fpout) != 10) { // pas complet..
|
||||
fclose(fpout);
|
||||
sprintf(str->err_msg, "File header too small (file len = " LLintP ")",
|
||||
(LLint) fsize(file));
|
||||
return 0;
|
||||
}
|
||||
#if JAVADEBUG
|
||||
printf("header\n");
|
||||
#endif
|
||||
// tester en tête
|
||||
if (reverse_endian()) {
|
||||
header.magic = hts_swap32(header.magic);
|
||||
header.count = hts_swap16(header.count);
|
||||
}
|
||||
if (header.magic != 0xCAFEBABE) {
|
||||
sprintf(str->err_msg, "non java file");
|
||||
if (fpout) {
|
||||
fclose(fpout);
|
||||
fpout = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* A constant-pool entry is >= 1 byte on disk; reject a count exceeding
|
||||
the file size (hostile .class ~68 MB alloc DoS). */
|
||||
if (!hts_count_fits(header.count, (LLint) fsize(file))) {
|
||||
fclose(fpout);
|
||||
sprintf(str->err_msg,
|
||||
"Invalid constant pool count %u (file len " LLintP ")",
|
||||
(unsigned) header.count, (LLint) fsize(file));
|
||||
return 0;
|
||||
}
|
||||
tab = (RESP_STRUCT *) calloct(header.count, sizeof(RESP_STRUCT));
|
||||
if (!tab) {
|
||||
sprintf(str->err_msg, "Unable to alloc %d bytes",
|
||||
(int) sizeof(RESP_STRUCT));
|
||||
if (fpout) {
|
||||
fclose(fpout);
|
||||
fpout = NULL;
|
||||
}
|
||||
return 0; // erreur..
|
||||
}
|
||||
#if JAVADEBUG
|
||||
printf("calchead\n");
|
||||
#endif
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = 1; i < header.count; i++) {
|
||||
int err = 0; // ++
|
||||
|
||||
tab[i] = readtable(str, fpout, tab[i], &err);
|
||||
if (!err) {
|
||||
if ((tab[i].type == HTS_LONG) || (tab[i].type == HTS_DOUBLE))
|
||||
i++; //2 element si double ou float
|
||||
} else { // ++ une erreur est survenue!
|
||||
if (strnotempty(str->err_msg) == 0)
|
||||
strcpy(str->err_msg, "Internal readtable error");
|
||||
freet(tab);
|
||||
if (fpout) {
|
||||
fclose(fpout);
|
||||
fpout = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#if JAVADEBUG
|
||||
printf("addfiles\n");
|
||||
#endif
|
||||
{
|
||||
unsigned int Class;
|
||||
unsigned int SClass;
|
||||
int i;
|
||||
|
||||
Class = readshort(fpout);
|
||||
SClass = readshort(fpout);
|
||||
|
||||
for(i = 1; i < header.count; i++) {
|
||||
|
||||
if (tab[i].type == HTS_CLASS) {
|
||||
|
||||
if ((tab[i].index1 < header.count) && (tab[i].index1 >= 0)) {
|
||||
|
||||
if ((tab[i].index1 != SClass) && (tab[i].index1 != Class)
|
||||
&& (tab[tab[i].index1].name[0] != '[')) {
|
||||
|
||||
if (!strstr(tab[tab[i].index1].name, "java/")) {
|
||||
char BIGSTK tempo[1024];
|
||||
|
||||
tempo[0] = '\0';
|
||||
|
||||
snprintf(tempo, sizeof(tempo), "%s.class", tab[tab[i].index1].name);
|
||||
#if JAVADEBUG
|
||||
printf("add %s\n", tempo);
|
||||
#endif
|
||||
if (tab[tab[i].index1].file_position >= 0)
|
||||
str->addLink(str, tempo); /* tab[tab[i].index1].file_position */
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
i = header.count; // exit
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#if JAVADEBUG
|
||||
printf("end\n");
|
||||
#endif
|
||||
freet(tab);
|
||||
if (fpout) {
|
||||
fclose(fpout);
|
||||
fpout = NULL;
|
||||
}
|
||||
return 1;
|
||||
|
||||
} else {
|
||||
strcpy(str->err_msg, "bad MIME type");
|
||||
}
|
||||
}
|
||||
return 0; /* Error */
|
||||
}
|
||||
|
||||
/*
|
||||
module entry point
|
||||
*/
|
||||
EXTERNAL_FUNCTION int hts_plug(httrackp * opt, const char *argv);
|
||||
EXTERNAL_FUNCTION int hts_plug(httrackp * opt, const char *argv) {
|
||||
/* Plug callback functions */
|
||||
CHAIN_FUNCTION(opt, detect, hts_detect_java, NULL);
|
||||
CHAIN_FUNCTION(opt, parse, hts_parse_java, NULL);
|
||||
|
||||
return 1; /* success */
|
||||
}
|
||||
|
||||
// error: !=0 si erreur fatale
|
||||
static RESP_STRUCT readtable(htsmoduleStruct * str, FILE * fp,
|
||||
RESP_STRUCT trans, int *error) {
|
||||
char rname[1024];
|
||||
unsigned short int length;
|
||||
int j;
|
||||
|
||||
*error = 0; // pas d'erreur
|
||||
trans.file_position = -1;
|
||||
trans.type = (int) (unsigned char) fgetc(fp);
|
||||
switch (trans.type) {
|
||||
case HTS_CLASS:
|
||||
strcpy(trans.name, "Class");
|
||||
trans.index1 = readshort(fp);
|
||||
break;
|
||||
|
||||
case HTS_FIELDREF:
|
||||
strcpy(trans.name, "Field Reference");
|
||||
trans.index1 = readshort(fp);
|
||||
readshort(fp);
|
||||
break;
|
||||
|
||||
case HTS_METHODREF:
|
||||
strcpy(trans.name, "Method Reference");
|
||||
trans.index1 = readshort(fp);
|
||||
readshort(fp);
|
||||
break;
|
||||
|
||||
case HTS_INTERFACE:
|
||||
strcpy(trans.name, "Interface Method Reference");
|
||||
trans.index1 = readshort(fp);
|
||||
readshort(fp);
|
||||
break;
|
||||
case HTS_NAMEANDTYPE:
|
||||
strcpy(trans.name, "Name and Type");
|
||||
trans.index1 = readshort(fp);
|
||||
readshort(fp);
|
||||
break;
|
||||
|
||||
case HTS_STRING: // CONSTANT_String
|
||||
strcpy(trans.name, "String");
|
||||
trans.index1 = readshort(fp);
|
||||
break;
|
||||
|
||||
case HTS_INTEGER:
|
||||
strcpy(trans.name, "Integer");
|
||||
for(j = 0; j < 4; j++)
|
||||
fgetc(fp);
|
||||
break;
|
||||
|
||||
case HTS_FLOAT:
|
||||
strcpy(trans.name, "Float");
|
||||
for(j = 0; j < 4; j++)
|
||||
fgetc(fp);
|
||||
break;
|
||||
|
||||
case HTS_LONG:
|
||||
strcpy(trans.name, "Long");
|
||||
for(j = 0; j < 8; j++)
|
||||
fgetc(fp);
|
||||
break;
|
||||
case HTS_DOUBLE:
|
||||
strcpy(trans.name, "Double");
|
||||
for(j = 0; j < 8; j++)
|
||||
fgetc(fp);
|
||||
break;
|
||||
|
||||
case HTS_ASCIZ:
|
||||
case HTS_UNICODE:
|
||||
|
||||
if (trans.type == HTS_ASCIZ)
|
||||
strcpy(trans.name, "HTS_ASCIZ");
|
||||
else
|
||||
strcpy(trans.name, "HTS_UNICODE");
|
||||
|
||||
{
|
||||
char BIGSTK buffer[1024];
|
||||
char *p;
|
||||
|
||||
p = &buffer[0];
|
||||
|
||||
trans.file_position = ftell(fp);
|
||||
length = readshort(fp);
|
||||
if (length < HTS_URLMAXSIZE) {
|
||||
while(length > 0) {
|
||||
*p++ = fgetc(fp);
|
||||
|
||||
length--;
|
||||
}
|
||||
*p = '\0';
|
||||
|
||||
if (tris(str->opt, buffer) == 1)
|
||||
str->addLink(str, buffer); /* trans.file_position */
|
||||
else if (tris(str->opt, buffer) == 2)
|
||||
str->addLink(str, printname(rname, buffer));
|
||||
|
||||
strcpy(trans.name, buffer);
|
||||
} else { // gros pb
|
||||
while((length > 0) && (!feof(fp))) {
|
||||
fgetc(fp);
|
||||
length--;
|
||||
}
|
||||
if (!feof(fp)) {
|
||||
trans.type = -1;
|
||||
} else {
|
||||
sprintf(str->err_msg, "Internal structure error (ASCII)");
|
||||
*error = 1;
|
||||
}
|
||||
return (trans);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// on arrête tout
|
||||
sprintf(str->err_msg, "Internal structure unknown (type %d)", trans.type);
|
||||
*error = 1;
|
||||
return (trans);
|
||||
break;
|
||||
}
|
||||
return (trans);
|
||||
}
|
||||
|
||||
static unsigned short int readshort(FILE * fp) {
|
||||
unsigned short int valint;
|
||||
|
||||
if (fread(&valint, sizeof(valint), 1, fp) == 1) {
|
||||
if (reverse_endian())
|
||||
return hts_swap16(valint);
|
||||
else
|
||||
return valint;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static int tris(httrackp * opt, char *buffer) {
|
||||
char catbuff[CATBUFF_SIZE];
|
||||
|
||||
//
|
||||
// Java
|
||||
if ((buffer[0] == '[') && buffer[1] == 'L' && (!strstr(buffer, "java/")))
|
||||
return 2;
|
||||
if (strstr(buffer, ".gif") || strstr(buffer, ".jpg")
|
||||
|| strstr(buffer, ".jpeg") || strstr(buffer, ".au"))
|
||||
return 1;
|
||||
// Ajouts R.X: test type
|
||||
// Autres fichiers
|
||||
{
|
||||
char type[256];
|
||||
|
||||
if (get_httptype_sized(opt, type, sizeof(type), buffer,
|
||||
0)) // recognized type
|
||||
return 1;
|
||||
// ajout RX 05/2001
|
||||
else if (is_dyntype(get_ext(catbuff, sizeof(catbuff), buffer))) // asp,cgi...
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static char *printname(char rname[1024], char name[1024]) {
|
||||
char *p;
|
||||
char *p1;
|
||||
size_t j;
|
||||
|
||||
rname[0] = '\0';
|
||||
//
|
||||
|
||||
p = &name[0];
|
||||
|
||||
if (*p != '[') {
|
||||
return rname; // ""
|
||||
}
|
||||
p += 2;
|
||||
p1 = rname;
|
||||
for(j = 0; name[j] != '\0'; j++, p++) {
|
||||
if (*p == '/')
|
||||
*p1 = '.';
|
||||
if (*p == ';') {
|
||||
*p1 = '\0';
|
||||
strcat(rname, ".class");
|
||||
return rname;
|
||||
} else
|
||||
*p1 = *p;
|
||||
p1++;
|
||||
}
|
||||
p1 -= 3;
|
||||
*p1 = '\0';
|
||||
return rname;
|
||||
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998 Xavier Roche and other contributors
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Ethical use: we kindly ask that you NOT use this software to harvest email
|
||||
addresses or to collect any other private information about people. Doing so
|
||||
would dishonor our work and waste the many hours we have spent on it.
|
||||
|
||||
Please visit our Website: http://www.httrack.com
|
||||
*/
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
/* File: Java classes parser .h */
|
||||
/* Author: Yann Philippot */
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
#ifndef HTSJAVA_DEFH
|
||||
#define HTSJAVA_DEFH
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifndef HTS_DEF_FWSTRUCT_JAVA_HEADER
|
||||
#define HTS_DEF_FWSTRUCT_JAVA_HEADER
|
||||
typedef struct JAVA_HEADER JAVA_HEADER;
|
||||
#endif
|
||||
/* 10-byte on-disk .class header image, fread() directly: fields need exact
|
||||
widths (LP64's 8-byte 'unsigned long' magic never matched 0xCAFEBABE). */
|
||||
struct JAVA_HEADER {
|
||||
uint32_t magic;
|
||||
uint16_t minor;
|
||||
uint16_t major;
|
||||
uint16_t count;
|
||||
};
|
||||
|
||||
#ifndef HTS_DEF_FWSTRUCT_RESP_STRUCT
|
||||
#define HTS_DEF_FWSTRUCT_RESP_STRUCT
|
||||
typedef struct RESP_STRUCT RESP_STRUCT;
|
||||
#endif
|
||||
struct RESP_STRUCT {
|
||||
int file_position;
|
||||
//
|
||||
unsigned int index1;
|
||||
unsigned int type;
|
||||
char name[1024];
|
||||
};
|
||||
|
||||
/* Library internal definictions */
|
||||
#ifdef HTS_INTERNAL_BYTECODE
|
||||
|
||||
EXTERNAL_FUNCTION int hts_plug_java(httrackp * opt, const char *argv);
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,373 +0,0 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9,00"
|
||||
Name="htsjava"
|
||||
ProjectGUID="{2F353408-2C6C-4D31-9AC0-08BDC064DF64}"
|
||||
RootNamespace="htsjava"
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="131072"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
<Platform
|
||||
Name="x64"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="C:\temp\htsjava\Debug"
|
||||
IntermediateDirectory="C:\temp\htsjava\Debug"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="C:\Dev\openssl-1.0.1j\include"
|
||||
PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="C:\temp\httrack\htsjava.dll"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(OutDir)/htsjava.pdb"
|
||||
SubSystem="2"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(OutDir)/htsjava.lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|x64"
|
||||
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="C:\Dev\openssl-1.0.1j\include"
|
||||
PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="C:\temp\httrack64\htsjava.dll"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(OutDir)/htsjava.pdb"
|
||||
SubSystem="2"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(OutDir)/htsjava.lib"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="C:\temp\htsjava\Release"
|
||||
IntermediateDirectory="C:\temp\htsjava\Release"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="C:\Dev\openssl-1.0.1j\include"
|
||||
PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE"
|
||||
RuntimeLibrary="0"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="0"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="O:\HTTrack\httrack\htsjava.dll"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="O:\HTTrack\httrack\htsjava.pdb"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(OutDir)/htsjava.lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
CommandLine=""C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\signtool.exe" sign /f "Z:\Mes Documents\certificats\httrack-com\httrack-signing-certificate.pfx" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|x64"
|
||||
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="C:\Dev\openssl-1.0.1j\include"
|
||||
PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE"
|
||||
RuntimeLibrary="0"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="0"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="O:\HTTrack\httrack\x64\htsjava.dll"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="O:\HTTrack\httrack\x64\htsjava.pdb"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(OutDir)/htsjava.lib"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
CommandLine=""C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\signtool.exe" sign /f "Z:\Mes Documents\certificats\httrack-com\httrack-signing-certificate.pfx" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath="htsjava.c"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath="htsjava.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
12
src/htslib.c
12
src/htslib.c
@@ -5926,17 +5926,7 @@ int multipleStringMatch(const char *s, const char *match) {
|
||||
}
|
||||
|
||||
HTSEXT_API httrackp *hts_create_opt(void) {
|
||||
#if ( defined(_WIN32) || defined(__ANDROID__) )
|
||||
static const char *defaultModules[] = {
|
||||
"htsswf", "htsjava", "httrack-plugin", NULL
|
||||
};
|
||||
#else
|
||||
#ifndef HTS_LIBHTSJAVA_NAME
|
||||
#define HTS_LIBHTSJAVA_NAME "libhtsjava.so" /* non-autoconf fallback */
|
||||
#endif
|
||||
static const char *defaultModules[] = {"libhtsswf.so.1", HTS_LIBHTSJAVA_NAME,
|
||||
"httrack-plugin", NULL};
|
||||
#endif
|
||||
static const char *defaultModules[] = {"httrack-plugin", NULL};
|
||||
httrackp *opt = malloc(sizeof(httrackp));
|
||||
|
||||
/* default options */
|
||||
|
||||
@@ -456,13 +456,6 @@ static HTS_INLINE HTS_UNUSED const char *htsbuff_str(const htsbuff *b) {
|
||||
return b->buf;
|
||||
}
|
||||
|
||||
/** True if 'count' records of >= 1 byte each fit in 'available' bytes; guards
|
||||
an attacker-controlled count driving a large allocation. */
|
||||
static HTS_INLINE HTS_UNUSED hts_boolean hts_count_fits(size_t count,
|
||||
LLint available) {
|
||||
return (available >= 0 && (LLint) count <= available) ? HTS_TRUE : HTS_FALSE;
|
||||
}
|
||||
|
||||
/* Thin aliases over the libc allocator/memcpy (historical "t" suffix); no
|
||||
added bounds checking. freet() also NULLs the freed pointer and tolerates
|
||||
NULL. memcpybuff() despite the name is a raw memcpy: the caller owns the
|
||||
|
||||
@@ -2580,21 +2580,6 @@ static int st_ftpuser(httrackp *opt, int argc, char **argv) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* hts_count_fits caps the .class constant-pool entry count to the file size,
|
||||
rejecting the ~68 MB-per-file calloc DoS. */
|
||||
static int st_java(httrackp *opt, int argc, char **argv) {
|
||||
(void) opt;
|
||||
(void) argc;
|
||||
(void) argv;
|
||||
assertf(hts_count_fits(10, 1000) == HTS_TRUE);
|
||||
assertf(hts_count_fits(0, 10) == HTS_TRUE);
|
||||
assertf(hts_count_fits(65535, 10) == HTS_FALSE);
|
||||
assertf(hts_count_fits(1, 0) == HTS_FALSE);
|
||||
assertf(hts_count_fits(1, -1) == HTS_FALSE);
|
||||
printf("java constant-pool cap self-test OK\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
/* Registry: name -> handler, with a usage hint and a one-line description. */
|
||||
/* ------------------------------------------------------------ */
|
||||
@@ -2695,7 +2680,6 @@ static const struct selftest_entry {
|
||||
st_ftpline},
|
||||
#endif
|
||||
{"ftp-userpass", "", "ftp_split_userpass bounds URL userinfo", st_ftpuser},
|
||||
{"java", "", "java .class constant-pool count cap self-test", st_java},
|
||||
};
|
||||
|
||||
static void list_selftests(void) {
|
||||
|
||||
@@ -224,14 +224,6 @@ SOURCE=htsinthash.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=htsjava.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=htsjava.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=htslib.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# .class constant-pool count is capped to the file size (calloc DoS).
|
||||
httrack -O /dev/null -#test=java run | grep -q "java constant-pool cap self-test OK"
|
||||
@@ -1,26 +0,0 @@
|
||||
#!/bin/bash
|
||||
# The java plugin must load (versioned dlopen name) and parse a .class
|
||||
# constant pool: a resource named only inside Foo.class gets crawled.
|
||||
set -e
|
||||
|
||||
: "${top_srcdir:=..}"
|
||||
|
||||
tmproot=$(mktemp -d)
|
||||
trap 'rm -rf "$tmproot"' EXIT
|
||||
mkdir "$tmproot/javaclass"
|
||||
|
||||
cat >"$tmproot/javaclass/index.html" <<'EOF'
|
||||
<html><body><a href="Foo.class">applet</a></body></html>
|
||||
EOF
|
||||
printf 'GIF89a' >"$tmproot/javaclass/hello.gif"
|
||||
# magic/minor/major, count=2, one CONSTANT_Utf8 "hello.gif", class/superclass
|
||||
printf '\xCA\xFE\xBA\xBE\x00\x00\x00\x32\x00\x02\x01\x00\x09hello.gif\x00\x00\x00\x00' \
|
||||
>"$tmproot/javaclass/Foo.class"
|
||||
|
||||
# --log-found first: a plugin-load failure (wrong soname, shadowing system
|
||||
# libhtsjava) trips here on the banner suffix, not as an opaque "not found".
|
||||
bash "$top_srcdir/tests/local-crawl.sh" --root "$tmproot" --errors 0 \
|
||||
--log-found '\+libhtsjava' \
|
||||
--found 'javaclass/Foo.class' \
|
||||
--found 'javaclass/hello.gif' \
|
||||
httrack 'BASEURL/javaclass/index.html'
|
||||
@@ -47,7 +47,6 @@ TESTS = \
|
||||
01_engine-identabs.test \
|
||||
01_engine-escape-room.test \
|
||||
01_engine-inplace-escape.test \
|
||||
01_engine-java.test \
|
||||
01_engine-makeindex.test \
|
||||
01_engine-mime.test \
|
||||
01_engine-parse.test \
|
||||
@@ -103,7 +102,6 @@ TESTS = \
|
||||
28_local-pause.test \
|
||||
29_local-redirect-fragment.test \
|
||||
30_local-fragment-link.test \
|
||||
31_local-javaclass.test \
|
||||
32_local-cdispo.test \
|
||||
33_local-delayed.test \
|
||||
34_local-maxtime.test \
|
||||
|
||||
Reference in New Issue
Block a user