<!--
 File        :  doc/source/changelog.sgml

 Purpose     :  Entity included in other project documents.

 Copyright (C) 2013-2021 Privoxy Developers https://www.privoxy.org/
 See LICENSE.

 ======================================================================
  This file used for inclusion with other documents only.
 ======================================================================

 If you make changes to this file, please verify the finished
 docs all display as intended.

 This file is included into:

  user-manual
-->


<!--
 The SGML ChangeLog can be generated with: utils/changelog2doc.pl ChangeLog
-->

<para>
  <application>Privoxy 3.0.33</application> fixes an XSS issue
  and multiple DoS issues and a couple of other bugs.
  The issues also affect earlier Privoxy releases.
  <application>Privoxy 3.0.33</application> also comes with
  a couple of general improvements an new features.
</para>
<para>
  Changes in <application>Privoxy 3.0.33</application> stable:
</para>
<para>
 <itemizedlist>
  <listitem>
   <para>
    Security/Reliability:
    <itemizedlist>
    <listitem>
     <para>
      cgi_error_no_template(): Encode the template name to prevent
      XSS (cross-side scripting) when Privoxy is configured to servce
      the user-manual itself.
      Commit 0e668e9409c. OVE-20211102-0001. CVE-2021-44543.
      Reported by: Artem Ivanov
     </para>
    </listitem>
    <listitem>
     <para>
      get_url_spec_param(): Free memory of compiled pattern spec
      before bailing.
      Reported by Joshua Rogers (Opera) who also provided the fix.
      Commit 652b4b7cb0. OVE-20211201-0003. CVE-2021-44540.
     </para>
    </listitem>
    <listitem>
     <para>
      process_encrypted_request_headers(): Free header memory when
      failing to get the request destination.
      Reported by Joshua Rogers (Opera) who also provided the fix.
      Commit 0509c58045. OVE-20211201-0002. CVE-2021-44541.
     </para>
    </listitem>
    <listitem>
     <para>
      send_http_request(): Prevent memory leaks when handling errors
      Reported by Joshua Rogers (Opera) who also provided the fix.
      Commit c48d1d6d08. OVE-20211201-0001. CVE-2021-44542.
     </para>
     </listitem>
    </itemizedlist>
   </para>
  </listitem>
  <listitem>
   <para>
    Bug fixes:
    <itemizedlist>
    <listitem>
     <para>
      handle_established_connection(): Skip the poll()/select() calls
      if TLS data is pending on the server socket. The TLS library may
      have already consumed all the data from the server response in
      which case poll() and select() will not detect that data is
      available to be read.
      Fixes SF bug #926 reported by Wen Yue.
     </para>
    </listitem>
    <listitem>
     <para>
      continue_https_chat(): Update csp->server_connection.request_sent
      after sending the request to make sure the latency is calculated
      correctly. Previously https connections were not reused after
      timeout seconds after the first request made on the connection.
     </para>
    </listitem>
    <listitem>
     <para>
      free_pattern_spec(): Don't try to free an invalid pointer
      when unloading an action file with a TAG pattern while
      Privoxy has been compiled without FEATURE_PCRE_HOST_PATTERNS.
      Closes: SF patch request #147. Patch by Maxim Antonov.
     </para>
    </listitem>
    <listitem>
     <para>
      Adjust build_request_line() to create a CONNECT request line when
      https-inspecting and forwarding to a HTTP proxy.
      Fixes SF bug #925 reported by Wen Yue.
     </para>
    </listitem>
    <listitem>
     <para>
      load_config(): Add a space that was missing in a log message.
     </para>
    </listitem>
    <listitem>
     <para>
      read_http_request_body(): Fix two error messages that used an
      incorrect variable.
     </para>
    </listitem>
    <listitem>
     <para>
      If the the response is chunk-encoded, ignore the Content-Length
      header sent by the server.
      Allows to load https://redmine.lighttpd.net/ with filtering enabled.
     </para>
     </listitem>
    </itemizedlist>
   </para>
  </listitem>
  <listitem>
   <para>
    General improvements:
    <itemizedlist>
    <listitem>
     <para>
      Allow to edit the add-header action through the CGI editor by
      generalizing the code that got added with the suppress-tag action.
      Closes SF patch request #146. Patch by Maxim Antonov.
     </para>
    </listitem>
    <listitem>
     <para>
      Add a CGI handler for /wpad.dat that returns a
      Proxy Auto-Configuration (PAC) file.
      Among other things, it can be used to instruct clients
      through DHCP to use Privoxy as proxy.
      For example with the dnsmasq option:
      dhcp-option=252,http://config.privoxy.org/wpad.dat
      Initial patch by Richard Schneidt.
     </para>
    </listitem>
    <listitem>
     <para>
      Don't log the applied actions in process_encrypted_request()
      Log them in continue_https_chat() instead to mirror chat().
      Prevents the applied actions from getting logged twice
      for the first request on an https-inspected connection.
     </para>
    </listitem>
    <listitem>
     <para>
      OpenSSL generate_host_certificate(): Use config.privoxy.org as Common Name
      Org and Org Unit if the real host name is too long to get accepted by OpenSSL.
      Clients should only care about the Subject Alternative Name
      anyway and we can continue to use the real host name for it.
      Reported by Miles Wen on privoxy-users@.
     </para>
    </listitem>
    <listitem>
     <para>
      Establish the TLS connection with the client earlier and decide
      how to route the request afterwards. This allows to change the
      forwarding settings based on information from the https-inspected
      request, for example the path.
     </para>
    </listitem>
    <listitem>
     <para>
      listen_loop(): When shutting down gracefully, close listening ports
      before waiting for the threads to exit. Allows to start a second
      Privoxy with the same config file while the first Privoxy is still
      running.
     </para>
    </listitem>
    <listitem>
     <para>
      serve(): Close the client socket as well if the server socket
      for an inspected connection has been closed. Privoxy currently
      can't establish a new server connection when the client socket
      is reused and would drop the connection in continue_https_chat()
      anyway.
     </para>
    </listitem>
    <listitem>
     <para>
      Don't disable redirect checkers in redirect_url().
      Disable them in handle_established_connection() instead.
      Doing it in redirect_url() prevented the +redirect{} and
      +fast-redirects{} actions from being logged with LOG_LEVEL_ACTIONS.
     </para>
    </listitem>
    <listitem>
     <para>
      handle_established_connection(): Slightly improve a comment.
     </para>
    </listitem>
    <listitem>
     <para>
      handle_established_connection(): Fix a comment.
     </para>
    </listitem>
    <listitem>
     <para>
      socks5_connect(): Fix indentation.
     </para>
    </listitem>
    <listitem>
     <para>
      handle_established_connection(): Improve an error message.
     </para>
    </listitem>
    <listitem>
     <para>
      create_pattern_spec(): Fix ifdef indentation.
     </para>
    </listitem>
    <listitem>
     <para>
      Fix comment typos.
     </para>
    </listitem>
    <listitem>
     <para>
      process_encrypted_request(): Improve a log message.
      The function only processes request headers and there
      may still be unread request body data left to process.
     </para>
    </listitem>
    <listitem>
     <para>
      chat(): Log the applied actions before deciding how to forward the request.
     </para>
    </listitem>
    <listitem>
     <para>
      parse_time_header(): Silence a coverity complaint when building without assertions.
     </para>
    </listitem>
    <listitem>
     <para>
      receive_encrypted_request_headers(): Improve a log message.
     </para>
    </listitem>
    <listitem>
     <para>
      mbedTLS get_ciphersuites_from_string(): Use strlcpy() instead of strncpy().
      Previously the terminating NUL wasn't copied which resulted
      in a compiler warning. This didn't cause actual problems as
      the target buffer was initialized by zalloc_or_die() so the
      last byte of the target buffer was NUL already.
      Actually copying the terminating NUL seems clearer, though.
     </para>
    </listitem>
    <listitem>
     <para>
      Remove compiler warnings. "log_error(LOG_LEVEL_FATAL, ..."
      doesn't return but apparently the compiler doesn't know that.
      Get rid of several "this statement may fall through
      [-Wimplicit-fallthrough=]" warnings.
     </para>
    </listitem>
    <listitem>
     <para>
      Store the PEM certificate in a dynamically allocated buffer
      when https-inspecting. Should prevent errors like:
      2021-03-16 22:36:19.148 7f47bbfff700 Error: X509 PEM cert len 16694 is larger than buffer len 16383
      As a bonus it should slightly reduce the memory usage as most
      certificates are smaller than the previously used fixed buffer.
      Reported by: Wen Yue
     </para>
    </listitem>
    <listitem>
     <para>
      OpenSSL generate_host_certificate(): Fix two error messsages.
     </para>
    </listitem>
    <listitem>
     <para>
      Improve description of handle_established_connection()
     </para>
    </listitem>
    <listitem>
     <para>
      OpenSSL ssl_store_cert(): Translate EVP_PKEY_EC to a string.
     </para>
    </listitem>
    <listitem>
     <para>
      OpenSSL ssl_store_cert(): Remove pointless variable initialization.
     </para>
    </listitem>
    <listitem>
     <para>
      OpenSSL ssl_store_cert(): Initialize pointer with NULL instead of 0.
     </para>
     </listitem>
    </itemizedlist>
   </para>
  </listitem>
  <listitem>
   <para>
    Action file improvements:
    <itemizedlist>
    <listitem>
     <para>
      Disable fast-redirects for .microsoftonline.com/.
     </para>
    </listitem>
    <listitem>
     <para>
      Disable fast-redirects for idp.springer.com/.
     </para>
    </listitem>
    <listitem>
     <para>
      Disable fast-redirects for .zeit.de/zustimmung.
     </para>
    </listitem>
    <listitem>
     <para>
      Unblock adv-archiv.dfn-cert.de/.
     </para>
    </listitem>
    <listitem>
     <para>
      Block requests to eu-tlp01.kameleoon.eu/.
     </para>
    </listitem>
    <listitem>
     <para>
      Block requests to fpa-events.arstechnica.com/.
     </para>
    </listitem>
    <listitem>
     <para>
      Unblock nlnet.nl/.
     </para>
    </listitem>
    <listitem>
     <para>
      Unblock adguard.com/.
     </para>
     </listitem>
    </itemizedlist>
   </para>
  </listitem>
  <listitem>
   <para>
    Privoxy-Log-Parser:
    <itemizedlist>
    <listitem>
     <para>
      Highlight 'Socket timeout 3 reached: http://127.0.0.1:20000/no-filter/chunked-content/36'.
     </para>
    </listitem>
    <listitem>
     <para>
      Improve documentation for inactivity-detection mode.
     </para>
    </listitem>
    <listitem>
     <para>
      Detect date changes when looking for inactivity.
     </para>
    </listitem>
    <listitem>
     <para>
      Add a --passed-request-statistics-threshold option
      that can be set to get statistics for requests that
      were passed.
     </para>
    </listitem>
    <listitem>
     <para>
      Add a "inactivity detection" mode which can be useful
      for debugging purposes.
     </para>
    </listitem>
    <listitem>
     <para>
      Bump version to 0.9.4.
     </para>
    </listitem>
    <listitem>
     <para>
      Only run print_intro() and print_outro() when syntax highlighting.
     </para>
    </listitem>
    <listitem>
     <para>
      Rephrase a sentence in the documentation.
     </para>
    </listitem>
    <listitem>
     <para>
      Highlight 'Client socket 7 is no longer usable. The server socket has been closed.'.
     </para>
    </listitem>
    <listitem>
     <para>
      Clarify --statistics output by explicitly mentioning that
      the status codes sent by the server may differ from the ones
      in "debug 512" messages.
     </para>
    </listitem>
    <listitem>
     <para>
      Fix typo in the --statistics output.
     </para>
    </listitem>
    <listitem>
     <para>
      Remove an unused variable.
     </para>
    </listitem>
    <listitem>
     <para>
      Highlight 'The peer notified us that the connection on socket 11 is going to be closed'.
     </para>
     </listitem>
    </itemizedlist>
   </para>
  </listitem>
  <listitem>
   <para>
    Privoxy-Regression-Test:
    <itemizedlist>
    <listitem>
     <para>
      Remove duplicated word in a comment.
     </para>
     </listitem>
    </itemizedlist>
   </para>
  </listitem>
  <listitem>
   <para>
    regression-tests.action:
    <itemizedlist>
    <listitem>
     <para>
      Add fetch test for http://p.p/wpad.dat.
     </para>
    </listitem>
    <listitem>
     <para>
      Bump for-privoxy-version to 3.0.33 which introduced the wpad.dat support.
     </para>
    </listitem>
    <listitem>
     <para>
      Add more tests for the '/send-banner' code.
     </para>
    </listitem>
    <listitem>
     <para>
      Add test for OVE-20210203-0001.
     </para>
    </listitem>
    <listitem>
     <para>
      Add a test for CVE-2021-20217.
     </para>
     </listitem>
    </itemizedlist>
   </para>
  </listitem>
  <listitem>
   <para>
    uagen:
    <itemizedlist>
    <listitem>
     <para>
      Bump generated Firefox version to 91 (ESR).
     </para>
    </listitem>
    <listitem>
     <para>
      Bump version to 1.2.3.
     </para>
    </listitem>
    <listitem>
     <para>
      Bump copyright.
     </para>
     </listitem>
    </itemizedlist>
   </para>
  </listitem>
  <listitem>
   <para>
    Build system:
    <itemizedlist>
    <listitem>
     <para>
      configure: Bump SOURCE_DATE_EPOCH.
     </para>
    </listitem>
    <listitem>
     <para>
      GNUmakefile.in: Fix typo.
     </para>
    </listitem>
    <listitem>
     <para>
      configure: Add another warning in case --disable-pthread
      is used while POSIX threads are available.
      Various features don't even compile when not using threads.
     </para>
    </listitem>
    <listitem>
     <para>
      Add configure option to enable MemorySanitizer.
     </para>
    </listitem>
    <listitem>
     <para>
      Add configure option to enable UndefinedBehaviorSanitizer.
     </para>
    </listitem>
    <listitem>
     <para>
      Add configure option to enable AddressSanitizer.
     </para>
    </listitem>
    <listitem>
     <para>
      Bump copyright.
     </para>
    </listitem>
    <listitem>
     <para>
      Add a configure option to disable pcre JIT compilation.
      While JIT compilation makes filtering faster it can
      cause false-positive valgrind complaints.
      As reported by Gwyn Ciesla in SF bug 924 it also can
      cause problems when the SELinux policy does not grant
      Privoxy "execmem" privileges.
     </para>
    </listitem>
    <listitem>
     <para>
      configure: Remove obsolete RPM_BASE check.
     </para>
     </listitem>
    </itemizedlist>
   </para>
  </listitem>
  <listitem>
   <para>
    Windows build system:
    <itemizedlist>
    <listitem>
     <para>
      Update the build script to use mbed tls version 2.6.11.
     </para>
    </listitem>
    <listitem>
     <para>
      Update build script to use the final 8.45 pcre library.
     </para>
    </listitem>
    <listitem>
     <para>
      Put all the '--enable-xxx' options in the configure call together.
     </para>
     </listitem>
    </itemizedlist>
   </para>
  </listitem>
  <listitem>
   <para>
    macOS build system:
    <itemizedlist>
    <listitem>
     <para>
      The OSXPackageBuilder repository has been updated and
      can be used to create macOS packages again.
     </para>
     </listitem>
    </itemizedlist>
   </para>
  </listitem>
  <listitem>
   <para>
    Documentation:
    <itemizedlist>
    <listitem>
     <para>
      contacting: Remove obsolete reference to announce.sgml.
     </para>
    </listitem>
    <listitem>
     <para>
      contacting: Request that the browser cache is cleared before
      producing a log file for submission.
     </para>
    </listitem>
    <listitem>
     <para>
      Sponsor FAQ: Note that Privoxy users may follow sponsor links
      without Referer header set.
     </para>
    </listitem>
    <listitem>
     <para>
      newfeatures: Clarify that https inspection also allows to
      filter https responses.
     </para>
    </listitem>
    <listitem>
     <para>
      developer-manual: Mention that announce.txt should be updated
      when doing a release.
     </para>
    </listitem>
    <listitem>
     <para>
      config: Explicitly mention that the CGI pages disclosing the
      ca-password can be blocked and upgrade the disclosure paragraphs
      to a warning.
     </para>
    </listitem>
    <listitem>
     <para>
      Put all the requested debug options in the config file.
      Section 11.1 of the Privoxy user manual lists all the debug
      options that should be enabled when reporting problems or requesting support.
      Make it easier for users to do the right thing by having all those
      options present in the config.
     </para>
    </listitem>
    <listitem>
     <para>
      Update TODO list item #184 to note that WolfSSL support will
      (hopefully) appear after the 3.0.34 release.
     </para>
    </listitem>
    <listitem>
     <para>
      Update max-client-connections's description.
      On modern systems other than Windows Privoxy should
      use poll() in which case the FD_SETSIZE value isn't
      releveant.
     </para>
    </listitem>
    <listitem>
     <para>
      Add a warning that the socket-timeout does not apply
      to operations done by TLS libraries.
     </para>
    </listitem>
    <listitem>
     <para>
      Make documentation slightly less "offensive" for some people
      by avoiding the word "hell".
     </para>
     </listitem>
    </itemizedlist>
   </para>
  </listitem>
 </itemizedlist>
</para>
