-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<HTML
-><HEAD
-><TITLE
->Testing Guidelines</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
-REL="HOME"
-TITLE="Privoxy Developer Manual"
-HREF="index.html"><LINK
-REL="PREVIOUS"
-TITLE="Coding Guidelines"
-HREF="coding.html"><LINK
-REL="NEXT"
-TITLE="Releasing a New Version"
-HREF="newrelease.html"><LINK
-REL="STYLESHEET"
-TYPE="text/css"
-HREF="../p_doc.css"></HEAD
-><BODY
-CLASS="SECT1"
-BGCOLOR="#EEEEEE"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-SUMMARY="Header navigation table"
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->Privoxy Developer Manual</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="coding.html"
-ACCESSKEY="P"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
-></TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="newrelease.html"
-ACCESSKEY="N"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="TESTING"
->5. Testing Guidelines</A
-></H1
-><P
->To be filled.</P
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="TESTING-PLAN"
->5.1. Testplan for releases</A
-></H2
-><P
-> Explain release numbers. major, minor. developer releases. etc.
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>Testing Guidelines</title>
+ <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
+ <link rel="HOME" title="Privoxy Developer Manual" href="index.html">
+ <link rel="PREVIOUS" title="Coding Guidelines" href="coding.html">
+ <link rel="NEXT" title="Releasing a New Version" href="newrelease.html">
+ <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+<body class="SECT1" bgcolor="#EEEEEE" text="#000000" link="#0000FF" vlink="#840084" alink="#0000FF">
+ <div class="NAVHEADER">
+ <table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <th colspan="3" align="center">Privoxy Developer Manual</th>
+ </tr>
+ <tr>
+ <td width="10%" align="left" valign="bottom"><a href="coding.html" accesskey="P">Prev</a></td>
+ <td width="80%" align="center" valign="bottom"></td>
+ <td width="10%" align="right" valign="bottom"><a href="newrelease.html" accesskey="N">Next</a></td>
+ </tr>
+ </table>
+ <hr align="left" width="100%">
+ </div>
+ <div class="SECT1">
+ <h1 class="SECT1"><a name="TESTING" id="TESTING">5. Testing Guidelines</a></h1>
+ <p>To be filled.</p>
+ <div class="SECT2">
+ <h2 class="SECT2"><a name="TESTING-PLAN" id="TESTING-PLAN">5.1. Testplan for releases</a></h2>
+ <p>Explain release numbers. major, minor. developer releases. etc.</p>
+ <ol type="1">
+ <li>
+ <p>Remove any existing rpm with rpm -e</p>
+ </li>
+ <li>
+ <p>Remove any file that was left over. This includes (but is not limited to)</p>
+ <ul>
+ <li>
+ <p>/var/log/privoxy</p>
+ </li>
+ <li>
+ <p>/etc/privoxy</p>
+ </li>
+ <li>
+ <p>/usr/sbin/privoxy</p>
+ </li>
+ <li>
+ <p>/etc/init.d/privoxy</p>
+ </li>
+ <li>
+ <p>/usr/doc/privoxy*</p>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <p>Install the rpm. Any error messages?</p>
+ </li>
+ <li>
+ <p>start,stop,status <span class="APPLICATION">Privoxy</span> with the specific script (e.g.
+ /etc/rc.d/init/privoxy stop). Reboot your machine. Does autostart work?</p>
+ </li>
+ <li>
+ <p>Start browsing. Does <span class="APPLICATION">Privoxy</span> work? Logfile written?</p>
+ </li>
+ <li>
+ <p>Remove the rpm. Any error messages? All files removed?</p>
+ </li>
+ </ol>
+ </div>
+ <div class="SECT2">
+ <h2 class="SECT2"><a name="PRIVOXY-REGRESSION-TEST" id="PRIVOXY-REGRESSION-TEST">5.2. Testing with <span class=
+ "APPLICATION">Privoxy-Regression-Test</span></a></h2>
+ <p>If you compiled, packaged or merely installed Privoxy, it is recommended to run <span class=
+ "APPLICATION">Privoxy-Regression-Test</span> to verify that at least the tested parts of <span class=
+ "APPLICATION">Privoxy</span> are working as expected.</p>
+ <p>This is actually pretty easy. For details, please see <b class="COMMAND">perldoc
+ privoxy-regression-test.pl</b>.</p>
+ <p>Here is an example of what <span class="APPLICATION">Privoxy-Regression-Test</span> can do for you:</p>
+ <table border="0" bgcolor="#E0E0E0" width="100%">
+ <tr>
+ <td>
+ <pre class="PROGRAMLISTING"> # Run all the tests
+ fk@t520 ~ $privoxy-regression-test.pl
+ 2020-12-14 12:16:32: Asking Privoxy for the number of action files available ...
+ 2020-12-14 12:16:32: Gathering regression tests from 9 action file(s) delivered by Privoxy 3.0.30.
+ 2020-12-14 12:16:32: Executing regression tests ...
+ 2020-12-14 12:16:41: Ooops. Expected removal but: 'Referer: https://p.p/' is still there.
+ 2020-12-14 12:16:41: Failure for test 785. Header 'Referer: https://p.p/' and tag 'hide-referrer{conditional-block}'
+ 2020-12-14 12:16:41: Ooops. Got: 'Referer: https://p.p/' while expecting: 'Referer: http://p.p/'
+ 2020-12-14 12:16:41: Failure for test 791. Header 'Referer: https://p.p/' and tag 'hide-referrer{conditional-forge}'
+ 2020-12-14 12:16:44: Executed 1087 regression tests. Skipped 115. 1085 successes, 2 failures.
+ # Repeat one of the failing tests and get a curl command to quickly reproduce the problem
+ # without causing too much log noise.
+ fk@t520 ~ $privoxy-regression-test.pl --test-number 785 --verbose --debug 4
+ 2020-12-14 12:17:55: Asking Privoxy for the number of action files available ...
+ [...]
+ 2020-12-14 12:17:56: Executing regression tests ...
+ 2020-12-14 12:17:56: Executing: curl --include -H 'Proxy-Connection:' -H 'Connection: close' -s -S --user-agent 'Privoxy-Regression-Test 0.7.2' --max-time '5' --globoff -H 'X-Privoxy-Control: hide-referrer{conditional-block}' -H 'Referer: https://p.p/' http://p.p/show-request 2>&1
+ 2020-12-14 12:17:56: Ooops. Expected removal but: 'Referer: https://p.p/' is still there.
+ 2020-12-14 12:17:56: Failure for test 785 (0/13/5). Header 'Referer: https://p.p/' and tag 'hide-referrer{conditional-block}'
+ 2020-12-14 12:17:56: Executed 1 regression tests. Skipped 1201. 0 successes, 1 failures.</pre>
+ </td>
+ </tr>
+ </table>
+ <p>Use the if the <b class="COMMAND">--privoxy-address</b> option if the http_proxy environment variable isn't
+ configured and you don't want to use the default (http://127.0.0.1:8118/).</p>
+ </div>
+ <div class="SECT2">
+ <h2 class="SECT2"><a name="FUZZING" id="FUZZING">5.3. Fuzzing Privoxy</a></h2>
+ <p>To make fuzzing more convenient, Privoxy can be configured with --enable-fuzz which will result in the --fuzz
+ option becoming available.</p>
+ <p>Example (tested on ElectroBSD):</p>
+ <table border="0" bgcolor="#E0E0E0" width="100%">
+ <tr>
+ <td>
+ <pre class="PROGRAMLISTING"> # Compile Privoxy with instrumentation for afl
+ $ export CC=afl-clang
+ $ export CFLAGS="-fsanitize=address -ggdb"
+ $ export CPPFLAGS=-I/usr/local/include/
+ $ export LDFLAGS="-fsanitize=address -L/usr/local/lib"
+ $ export AFL_USE_ASAN=1
+ $ export AFL_HARDEN=1
+ $ ./configure --with-debug --enable-extended-host-patterns --enable-accept-filter --enable-no-gifs --enable-compression --enable-strptime-sanity-checks --enable-external-filters --enable-fuzz
-<P
-></P
-><OL
-TYPE="1"
-><LI
-><P
->Remove any existing rpm with rpm -e</P
-></LI
-><LI
-><P
->Remove any file that was left over. This includes (but is not limited to)
- <P
-></P
-><UL
-><LI
-><P
->/var/log/privoxy</P
-></LI
-><LI
-><P
->/etc/privoxy</P
-></LI
-><LI
-><P
->/usr/sbin/privoxy</P
-></LI
-><LI
-><P
->/etc/init.d/privoxy</P
-></LI
-><LI
-><P
->/usr/doc/privoxy*</P
-></LI
-></UL
-></P
-></LI
-><LI
-><P
->Install the rpm. Any error messages?</P
-></LI
-><LI
-><P
->start,stop,status <SPAN
-CLASS="APPLICATION"
->Privoxy</SPAN
-> with the specific script
- (e.g. /etc/rc.d/init/privoxy stop). Reboot your machine. Does
- autostart work?</P
-></LI
-><LI
-><P
->Start browsing. Does <SPAN
-CLASS="APPLICATION"
->Privoxy</SPAN
-> work? Logfile written?</P
-></LI
-><LI
-><P
->Remove the rpm. Any error messages? All files removed?</P
-></LI
-></OL
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="TESTING-REPORT"
->5.2. Test reports</A
-></H2
-><P
->Please submit test reports only with the <A
-HREF="http://sourceforge.net/tracker/?func=add&group_id=11118&atid=395005"
-TARGET="_top"
->test form</A
->
-at sourceforge. Three simple steps:
- <P
-></P
-><UL
-><LI
-><P
->Select category: the distribution you test on.</P
-></LI
-><LI
-><P
->Select group: the version of <SPAN
-CLASS="APPLICATION"
->Privoxy</SPAN
-> that we are about to release.</P
-></LI
-><LI
-><P
->Fill the Summary and Detailed Description with something
- intelligent (keep it short and precise).</P
-></LI
-></UL
->
- Do not mail to the mailing list (we cannot keep track on issues there).
- </P
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-SUMMARY="Footer navigation table"
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="coding.html"
-ACCESSKEY="P"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="index.html"
-ACCESSKEY="H"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="newrelease.html"
-ACCESSKEY="N"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->Coding Guidelines</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-> </TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->Releasing a New Version</TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
+ $ ./privoxy --fuzz
+ Privoxy version 3.0.24 (http://www.privoxy.org/)
+ Usage: ./privoxy [--config-test] [--chroot] [--help] [--no-daemon] [--pidfile pidfile] [--pre-chroot-nslookup hostname] [--user user[.group]] [--version] [configfile]
+ ./privoxy --fuzz fuzz-mode ./path/to/fuzzed/input [--stfu]
+
+ Supported fuzz modes and the expected input:
+ action: Text to parse as action file.
+ client-request: Client request to parse. Currently incomplete
+ client-header: Client header to parse.
+ chunked-transfer-encoding: Chunk-encoded data to dechunk.
+ deflate: deflate-compressed data to decompress.
+ filter: Text to parse as filter file.
+ gif: gif to deanimate.
+ gzip: gzip-compressed data to decompress.
+ pcrs-substitute: A pcrs-substitute to compile. Not a whole pcrs job! Example: Bla $1 bla C $3 blah.
+ server-header: Server header to parse.
+ server-response: Server response to parse.
+
+ The following fuzz modes read data from stdin if the 'file' is '-'
+ client-request
+ client-header
+ chunked-transfer-encoding
+ deflate
+ gif
+ gzip
+ pcrs-substitute
+ server-header
+ server-response
+
+ Aborting
+
+ $ export ASAN_OPTIONS='abort_on_error=1'
+ $ mkdir input output
+ $ echo '$1 bla fasel $2' > input/pcrs
+ $ afl-fuzz -i input -o output -m none ~/git/privoxy/privoxy --fuzz pcrs-substitute - --stfu
+
+ $ cat >input/pcrs.txt
+ FILTER: bla fasel
+ s@(.{1})[432](\d+)@$1$2$hostname@UgisT
+
+ $ afl-fuzz -i input/ -o output/ -f bla.filter -m none privoxy --fuzz filter bla.filter --stfu</pre>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ <div class="NAVFOOTER">
+ <hr align="left" width="100%">
+ <table summary="Footer navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="33%" align="left" valign="top"><a href="coding.html" accesskey="P">Prev</a></td>
+ <td width="34%" align="center" valign="top"><a href="index.html" accesskey="H">Home</a></td>
+ <td width="33%" align="right" valign="top"><a href="newrelease.html" accesskey="N">Next</a></td>
+ </tr>
+ <tr>
+ <td width="33%" align="left" valign="top">Coding Guidelines</td>
+ <td width="34%" align="center" valign="top"> </td>
+ <td width="33%" align="right" valign="top">Releasing a New Version</td>
+ </tr>
+ </table>
+ </div>
+</body>
+</html>