Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libfilezilla for openSUSE:Factory 
checked in at 2023-10-24 20:09:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libfilezilla (Old)
 and      /work/SRC/openSUSE:Factory/.libfilezilla.new.24901 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libfilezilla"

Tue Oct 24 20:09:35 2023 rev:54 rq:1119971 version:0.45.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/libfilezilla/libfilezilla.changes        
2023-07-12 17:28:34.755012810 +0200
+++ /work/SRC/openSUSE:Factory/.libfilezilla.new.24901/libfilezilla.changes     
2023-10-24 20:09:41.751444655 +0200
@@ -1,0 +2,11 @@
+Tue Oct 24 10:54:17 UTC 2023 - ecsos <ec...@opensuse.org>
+
+- Update to 0.45.0
+  * New features:
+    - fz::hash_accumulator now also works with hmac_sha256
+    - Added is_digest and digest_size to fz::hash_acumulator
+    - MSW: Added function to delete registry values
+  * Bugfixes and minor changes:
+    - Fixed a crash and a stall in the HTTP client
+
+-------------------------------------------------------------------

Old:
----
  libfilezilla-0.44.0.tar.xz

New:
----
  libfilezilla-0.45.0.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libfilezilla.spec ++++++
--- /var/tmp/diff_new_pack.11sODQ/_old  2023-10-24 20:09:42.487471414 +0200
+++ /var/tmp/diff_new_pack.11sODQ/_new  2023-10-24 20:09:42.487471414 +0200
@@ -16,11 +16,11 @@
 #
 
 
-%define major          40
+%define major          41
 %define libname                %{name}%{major}
 %define develname      %{name}-devel
 Name:           libfilezilla
-Version:        0.44.0
+Version:        0.45.0
 Release:        0
 Summary:        C++ library for filezilla
 License:        GPL-2.0-or-later
@@ -78,16 +78,8 @@
 %description -n        %{develname}
 Files needed for development with %{name}.
 
-
-
-
-
-
-
-
-
-
 # Need %%lang_package expanded for an extra conflict with an old library 
package
+
 %package lang
 # FIXME: consider using %%lang_package macro
 Summary:        Translations for package %{name}

++++++ libfilezilla-0.44.0.tar.xz -> libfilezilla-0.45.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/NEWS new/libfilezilla-0.45.0/NEWS
--- old/libfilezilla-0.44.0/NEWS        2023-06-28 15:00:47.000000000 +0200
+++ new/libfilezilla-0.45.0/NEWS        2023-10-11 10:26:52.000000000 +0200
@@ -1,3 +1,10 @@
+0.45.0 (2023-10-11)
+
++ fz::hash_accumulator now also works with hmac_sha256
++ Added is_digest and digest_size to fz::hash_acumulator
++ MSW: Added function to delete registry values
+- Fixed a crash and a stall in the HTTP client
+
 0.44.0 (2023-06-28)
 
 + Exportable hash accumulator state
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/configure 
new/libfilezilla-0.45.0/configure
--- old/libfilezilla-0.44.0/configure   2023-06-28 15:03:22.000000000 +0200
+++ new/libfilezilla-0.45.0/configure   2023-10-11 10:27:09.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for libfilezilla 0.44.0.
+# Generated by GNU Autoconf 2.71 for libfilezilla 0.45.0.
 #
 # Report bugs to <tim.ko...@filezilla-project.org>.
 #
@@ -621,8 +621,8 @@
 # Identity of this package.
 PACKAGE_NAME='libfilezilla'
 PACKAGE_TARNAME='libfilezilla'
-PACKAGE_VERSION='0.44.0'
-PACKAGE_STRING='libfilezilla 0.44.0'
+PACKAGE_VERSION='0.45.0'
+PACKAGE_STRING='libfilezilla 0.45.0'
 PACKAGE_BUGREPORT='tim.ko...@filezilla-project.org'
 PACKAGE_URL='https://lib.filezilla-project.org/'
 
@@ -1477,7 +1477,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures libfilezilla 0.44.0 to adapt to many kinds of systems.
+\`configure' configures libfilezilla 0.45.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1548,7 +1548,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libfilezilla 0.44.0:";;
+     short | recursive ) echo "Configuration of libfilezilla 0.45.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1704,7 +1704,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libfilezilla configure 0.44.0
+libfilezilla configure 0.45.0
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2098,7 +2098,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libfilezilla $as_me 0.44.0, which was
+It was created by libfilezilla $as_me 0.45.0, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -3076,7 +3076,7 @@
 # If any interfaces have been added since the last public release, then 
increment age.
 # If any interfaces have been removed or changed since the last public 
release, then set age to 0.
 # CURRENT:REVISION:AGE
-LIBRARY_VERSION=40:0:0
+LIBRARY_VERSION=41:0:0
 
 
 ac_config_headers="$ac_config_headers config/config.hpp"
@@ -3597,7 +3597,7 @@
 
 # Define the identity of the package.
  PACKAGE='libfilezilla'
- VERSION='0.44.0'
+ VERSION='0.45.0'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -23854,7 +23854,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libfilezilla $as_me 0.44.0, which was
+This file was extended by libfilezilla $as_me 0.45.0, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -23923,7 +23923,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-libfilezilla config.status 0.44.0
+libfilezilla config.status 0.45.0
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/configure.ac 
new/libfilezilla-0.45.0/configure.ac
--- old/libfilezilla-0.44.0/configure.ac        2023-06-28 15:00:47.000000000 
+0200
+++ new/libfilezilla-0.45.0/configure.ac        2023-10-11 10:26:52.000000000 
+0200
@@ -1,4 +1,4 @@
-AC_INIT([libfilezilla],[0.44.0],[tim.ko...@filezilla-project.org],[],[https://lib.filezilla-project.org/])
+AC_INIT([libfilezilla],[0.45.0],[tim.ko...@filezilla-project.org],[],[https://lib.filezilla-project.org/])
 
 # Update the version information only immediately before a public release of 
your software
 # If the library source code has changed at all since the last update, then 
increment revision (‘c:r:a’ becomes ‘c:r+1:a’).
@@ -6,7 +6,7 @@
 # If any interfaces have been added since the last public release, then 
increment age.
 # If any interfaces have been removed or changed since the last public 
release, then set age to 0.
 # CURRENT:REVISION:AGE
-LIBRARY_VERSION=40:0:0
+LIBRARY_VERSION=41:0:0
 
 
 AC_CONFIG_HEADERS([config/config.hpp])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/demos/https.cpp 
new/libfilezilla-0.45.0/demos/https.cpp
--- old/libfilezilla-0.44.0/demos/https.cpp     2023-04-12 14:41:33.000000000 
+0200
+++ new/libfilezilla-0.45.0/demos/https.cpp     2023-10-11 10:26:52.000000000 
+0200
@@ -35,7 +35,7 @@
        ~client()
        {
                remove_handler();
-               fz::http::client::client::stop(false);
+               destroy();
        }
 
        virtual fz::socket_interface* create_socket(fz::native_string const& 
host, unsigned short, bool tls) override
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/lib/buffer.cpp 
new/libfilezilla-0.45.0/lib/buffer.cpp
--- old/libfilezilla-0.44.0/lib/buffer.cpp      2023-01-12 10:41:17.000000000 
+0100
+++ new/libfilezilla-0.45.0/lib/buffer.cpp      2023-10-11 10:26:52.000000000 
+0200
@@ -1,4 +1,5 @@
 #include "libfilezilla/buffer.hpp"
+#include "libfilezilla/util.hpp"
 
 #include <algorithm>
 #include <cstdlib>
@@ -250,4 +251,18 @@
        return {reinterpret_cast<char const*>(get()), size()};
 }
 
+void buffer::wipe()
+{
+       fz::wipe(data_, capacity_);
+}
+
+void buffer::wipe_unused()
+{
+       size_t start = pos_ - data_;
+       fz::wipe(data_, start);
+
+       size_t stop = capacity_ - (start + size_);
+       fz::wipe(pos_ + size_, stop);
+}
+
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/lib/file.cpp 
new/libfilezilla-0.45.0/lib/file.cpp
--- old/libfilezilla-0.44.0/lib/file.cpp        2023-04-12 14:41:33.000000000 
+0200
+++ new/libfilezilla-0.45.0/lib/file.cpp        2023-10-11 10:26:52.000000000 
+0200
@@ -103,7 +103,10 @@
                case ERROR_ACCESS_DENIED:
                        return {result::noperm, err};
                case ERROR_DISK_FULL:
+               case ERROR_DISK_QUOTA_EXCEEDED:
                        return {result::nospace, err};
+               case ERROR_TOO_MANY_OPEN_FILES:
+                       return {result::resource_limit, err};
                default:
                        return {result::other, err};
                }
@@ -273,6 +276,9 @@
                case EDQUOT:
                case ENOSPC:
                        return {result::nospace, err};
+               case EMFILE:
+               case ENFILE:
+                       return {result::resource_limit, err};
                default:
                        return {result::other, err};
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/lib/hash.cpp 
new/libfilezilla-0.45.0/lib/hash.cpp
--- old/libfilezilla-0.44.0/lib/hash.cpp        2023-06-28 15:00:47.000000000 
+0200
+++ new/libfilezilla-0.45.0/lib/hash.cpp        2023-10-11 10:26:52.000000000 
+0200
@@ -1,10 +1,12 @@
 #include "libfilezilla/libfilezilla.hpp"
 
-#include "libfilezilla/hash.hpp"
+#include "libfilezilla/buffer.hpp"
 #include "libfilezilla/encode.hpp"
+#include "libfilezilla/hash.hpp"
 
 #include <nettle/hmac.h>
 #include <nettle/md5.h>
+#include <nettle/memops.h>
 #include <nettle/pbkdf2.h>
 
 // Undo Nettle's horrible namespace mangling fuckery
@@ -18,11 +20,15 @@
 
 namespace fz {
 
+size_t constexpr max_digest_length = 64;
+
 class hash_accumulator::impl
 {
 public:
        virtual ~impl() = default;
 
+       virtual size_t digest_size() const = 0;
+
        virtual std::vector<uint8_t> export_state() {
                return {};
        }
@@ -37,7 +43,7 @@
 
        virtual void update(uint8_t const* data, size_t size) = 0;
        virtual void reinit() = 0;
-       virtual std::vector<uint8_t> digest() = 0;
+       virtual void digest(uint8_t* out) = 0;
 };
 
 class hash_accumulator_md5 final : public hash_accumulator::impl
@@ -48,6 +54,8 @@
                reinit();
        }
 
+       virtual size_t digest_size() const override { return MD5_DIGEST_SIZE; }
+
        virtual void update(uint8_t const* data, size_t size) override
        {
                nettle_md5_update(&ctx_, size, data);
@@ -58,12 +66,9 @@
                nettle_md5_init(&ctx_);
        }
 
-       virtual std::vector<uint8_t> digest() override
+       virtual void digest(uint8_t* out) override
        {
-               std::vector<uint8_t> ret;
-               ret.resize(MD5_DIGEST_SIZE);
-               nettle_md5_digest(&ctx_, ret.size(), ret.data());
-               return ret;
+               nettle_md5_digest(&ctx_, MD5_DIGEST_SIZE, out);
        }
 
 private:
@@ -78,6 +83,8 @@
                reinit();
        }
 
+       virtual size_t digest_size() const override { return SHA1_DIGEST_SIZE; }
+
        virtual void update(uint8_t const* data, size_t size) override
        {
                nettle_sha1_update(&ctx_, size, data);
@@ -177,10 +184,13 @@
                        h1.update(second.data(), second.size());
                        h2.update(second.data(), second.size());
 
-                       if (h1.digest() != digest) {
+                       uint8_t buf[20];
+                       h1.digest(buf);
+                       if (memcmp(buf, digest.data(), 20)) {
                                return false;
                        }
-                       if (h2.digest() != digest) {
+                       h2.digest(buf);
+                       if (memcmp(buf, digest.data(), 20)) {
                                return false;
                        }
 
@@ -189,12 +199,9 @@
                return result;
        }
 
-       virtual std::vector<uint8_t> digest() override
+       virtual void digest(uint8_t* out) override
        {
-               std::vector<uint8_t> ret;
-               ret.resize(SHA1_DIGEST_SIZE);
-               nettle_sha1_digest(&ctx_, ret.size(), ret.data());
-               return ret;
+               nettle_sha1_digest(&ctx_, SHA1_DIGEST_SIZE, out);
        }
 
 private:
@@ -209,6 +216,8 @@
                reinit();
        }
 
+       virtual size_t digest_size() const override { return 
SHA256_DIGEST_SIZE; }
+
        virtual void update(uint8_t const* data, size_t size) override
        {
                nettle_sha256_update(&ctx_, size, data);
@@ -219,14 +228,12 @@
                nettle_sha256_init(&ctx_);
        }
 
-       virtual std::vector<uint8_t> digest() override
+       virtual void digest(uint8_t* out) override
        {
-               std::vector<uint8_t> ret;
-               ret.resize(SHA256_DIGEST_SIZE);
-               nettle_sha256_digest(&ctx_, ret.size(), ret.data());
-               return ret;
+               nettle_sha256_digest(&ctx_, SHA256_DIGEST_SIZE, out);
        }
 
+
 private:
        sha256_ctx ctx_;
 };
@@ -239,6 +246,8 @@
                reinit();
        }
 
+       virtual size_t digest_size() const override { return 
SHA512_DIGEST_SIZE; }
+
        virtual void update(uint8_t const* data, size_t size) override
        {
                nettle_sha512_update(&ctx_, size, data);
@@ -249,18 +258,45 @@
                nettle_sha512_init(&ctx_);
        }
 
-       virtual std::vector<uint8_t> digest() override
+       virtual void digest(uint8_t* out) override
        {
-               std::vector<uint8_t> ret;
-               ret.resize(SHA512_DIGEST_SIZE);
-               nettle_sha512_digest(&ctx_, ret.size(), ret.data());
-               return ret;
+               nettle_sha512_digest(&ctx_, SHA512_DIGEST_SIZE, out);
        }
 
 private:
        sha512_ctx ctx_;
 };
 
+class hash_accumulator_hmac_sha256 final : public hash_accumulator::impl
+{
+public:
+       hash_accumulator_hmac_sha256(std::vector<uint8_t> const& key)
+       {
+               nettle_hmac_sha256_set_key(&ctx_, key.size(), key.data());
+       }
+
+       virtual size_t digest_size() const override { return 
SHA256_DIGEST_SIZE; }
+
+       virtual void update(uint8_t const* data, size_t size) override
+       {
+               nettle_hmac_sha256_update(&ctx_, size, data);
+       }
+
+       virtual void reinit() override
+       {
+               uint8_t buf[SHA256_DIGEST_SIZE];
+               nettle_hmac_sha256_digest(&ctx_, SHA256_DIGEST_SIZE, buf);
+       }
+
+       virtual void digest(uint8_t* out) override
+       {
+               nettle_hmac_sha256_digest(&ctx_, SHA256_DIGEST_SIZE, out);
+       }
+
+private:
+       hmac_sha256_ctx ctx_;
+};
+
 hash_accumulator::hash_accumulator(hash_algorithm algorithm)
 {
        switch (algorithm) {
@@ -279,11 +315,25 @@
        }
 }
 
+hash_accumulator::hash_accumulator(hmac_algorithm algorithm, 
std::vector<uint8_t> const& key)
+{
+       switch (algorithm) {
+       case hmac_algorithm::sha256:
+               impl_ = new hash_accumulator_hmac_sha256(key);
+               break;
+       }
+}
+
 hash_accumulator::~hash_accumulator()
 {
        delete impl_;
 }
 
+size_t hash_accumulator::digest_size() const
+{
+       return impl_->digest_size();
+}
+
 void hash_accumulator::reinit()
 {
        impl_->reinit();
@@ -315,9 +365,41 @@
        impl_->update(data, size);
 }
 
+void hash_accumulator::update(buffer const& data)
+{
+       if (!data.empty()) {
+               impl_->update(data.get(), data.size());
+       }
+}
+
 std::vector<uint8_t> hash_accumulator::digest()
 {
-       return impl_->digest();
+       std::vector<uint8_t> ret;
+       ret.resize(impl_->digest_size());
+       impl_->digest(ret.data());
+       return ret;
+}
+
+void hash_accumulator::digest(uint8_t* out, size_t s)
+{
+       if (out && s == impl_->digest_size()) {
+               impl_->digest(out);
+       }
+}
+
+bool hash_accumulator::is_digest(std::string_view const& ref)
+{
+       return is_digest(reinterpret_cast<uint8_t const*>(ref.data()), 
ref.size());
+}
+
+bool hash_accumulator::is_digest(uint8_t const* ref, size_t s)
+{
+       if (!ref || s != impl_->digest_size()) {
+               return false;
+       }
+       uint8_t buf[max_digest_length];
+       impl_->digest(buf);
+       return memeql_sec(ref, buf, s);
 }
 
 std::vector<std::uint8_t> hash_accumulator::export_state()
@@ -352,7 +434,10 @@
        if (!in.empty()) {
                acc.update(reinterpret_cast<uint8_t const*>(in.data()), 
in.size());
        }
-       return acc.digest();
+       std::vector<uint8_t> ret;
+       ret.resize(MD5_DIGEST_SIZE);
+       acc.digest(ret.data());
+       return ret;
 }
 
 template<typename DataContainer>
@@ -364,7 +449,11 @@
        if (!in.empty()) {
                acc.update(reinterpret_cast<uint8_t const*>(in.data()), 
in.size());
        }
-       return acc.digest();
+       std::vector<uint8_t> ret;
+       ret.resize(SHA1_DIGEST_SIZE);
+       acc.digest(ret.data());
+       return ret;
+
 }
 
 template<typename DataContainer>
@@ -376,7 +465,11 @@
        if (!in.empty()) {
                acc.update(reinterpret_cast<uint8_t const*>(in.data()), 
in.size());
        }
-       return acc.digest();
+       std::vector<uint8_t> ret;
+       ret.resize(SHA256_DIGEST_SIZE);
+       acc.digest(ret.data());
+       return ret;
+
 }
 
 template<typename DataContainer>
@@ -388,7 +481,11 @@
        if (!in.empty()) {
                acc.update(reinterpret_cast<uint8_t const*>(in.data()), 
in.size());
        }
-       return acc.digest();
+       std::vector<uint8_t> ret;
+       ret.resize(SHA512_DIGEST_SIZE);
+       acc.digest(ret.data());
+       return ret;
+
 }
 
 template<typename KeyContainer, typename DataContainer>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/lib/http/client.cpp 
new/libfilezilla-0.45.0/lib/http/client.cpp
--- old/libfilezilla-0.44.0/lib/http/client.cpp 2023-04-25 15:04:25.000000000 
+0200
+++ new/libfilezilla-0.45.0/lib/http/client.cpp 2023-10-11 10:26:52.000000000 
+0200
@@ -154,6 +154,14 @@
        }
 }
 
+void client::destroy()
+{
+       if (impl_) {
+               impl_->remove_handler();
+               impl_->stop(false, false);
+       }
+}
+
 client::impl::impl(client & c, aio_buffer_pool * buffer_pool, event_handler & 
handler, logger_interface & logger, std::string && user_agent)
        : event_handler(handler.event_loop_)
        , client_(c)
@@ -549,11 +557,15 @@
                destroy_socket();
        }
 
+       requests_.pop_front();
+       read_state_ = read_state();
        if (send_pos_) {
+               if (!socket_) {
+                       logger_.log(logmsg::debug_warning, "Server refused 
keep-alive, but we already sent the next request(s). Must fail the other 
requests now."sv);
+                       return continuation::error;
+               }
                --send_pos_;
        }
-       requests_.pop_front();
-       read_state_ = read_state();
 
        if (wait_for_response_before_send_) {
                wait_for_response_before_send_ = false;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/aio/aio.hpp 
new/libfilezilla-0.45.0/lib/libfilezilla/aio/aio.hpp
--- old/libfilezilla-0.44.0/lib/libfilezilla/aio/aio.hpp        2023-04-12 
14:41:33.000000000 +0200
+++ new/libfilezilla-0.45.0/lib/libfilezilla/aio/aio.hpp        2023-10-11 
10:26:52.000000000 +0200
@@ -145,7 +145,7 @@
        }
 
        /**
-        * /brief Returns either a buffer lease, or records the passed 
waiter/handler as waiting.
+        * \brief Returns either a buffer lease, or records the passed 
waiter/handler as waiting.
         *
         * If waiting, do not call get_buffer again until after waiter/handler 
got signalled.
         *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/buffer.hpp 
new/libfilezilla-0.45.0/lib/libfilezilla/buffer.hpp
--- old/libfilezilla-0.44.0/lib/libfilezilla/buffer.hpp 2022-02-03 
10:53:39.000000000 +0100
+++ new/libfilezilla-0.45.0/lib/libfilezilla/buffer.hpp 2023-10-11 
10:26:52.000000000 +0200
@@ -147,6 +147,10 @@
        }
 
        std::string_view to_view() const;
+
+       void wipe();
+       void wipe_unused();
+
 private:
 
        // Invariants:
@@ -160,6 +164,14 @@
        size_t capacity_{};
 };
 
+inline void FZ_PUBLIC_SYMBOL wipe(buffer & b) {
+       b.wipe();
+}
+
+inline void FZ_PUBLIC_SYMBOL wipe_unused(buffer & b) {
+       b.wipe_unused();
+}
+
 }
 
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/file.hpp 
new/libfilezilla-0.45.0/lib/libfilezilla/file.hpp
--- old/libfilezilla-0.44.0/lib/libfilezilla/file.hpp   2022-09-05 
15:38:02.000000000 +0200
+++ new/libfilezilla-0.45.0/lib/libfilezilla/file.hpp   2023-10-11 
10:26:52.000000000 +0200
@@ -203,10 +203,10 @@
 bool FZ_PUBLIC_SYMBOL remove_file(native_string const& name);
 
 inline file::creation_flags operator|(file::creation_flags lhs, 
file::creation_flags rhs) {
-       return static_cast<file::creation_flags>(static_cast<unsigned int>(lhs) 
| rhs);
+       return 
static_cast<file::creation_flags>(static_cast<std::underlying_type_t<file::creation_flags>>(lhs)
 | static_cast<std::underlying_type_t<file::creation_flags>>(rhs));
 }
 inline file::creation_flags& operator|=(file::creation_flags & lhs, 
file::creation_flags rhs) {
-       lhs = static_cast<file::creation_flags>(static_cast<unsigned int>(lhs) 
| rhs);
+       lhs = lhs | rhs;
        return lhs;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/fsresult.hpp 
new/libfilezilla-0.45.0/lib/libfilezilla/fsresult.hpp
--- old/libfilezilla-0.44.0/lib/libfilezilla/fsresult.hpp       2023-04-12 
14:41:33.000000000 +0200
+++ new/libfilezilla-0.45.0/lib/libfilezilla/fsresult.hpp       2023-10-11 
10:26:52.000000000 +0200
@@ -41,9 +41,12 @@
                /// Requested dir does not exist or is not a dir
                nodir,
 
-               /// Out of disk space
+               /// Out of disk space (physical, or space quota)
                nospace,
 
+               /// Dynamic resource utilization, like too many open files
+               resource_limit,
+
                /// Some other error
                other
        };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libfilezilla-0.44.0/lib/libfilezilla/glue/registry.hpp 
new/libfilezilla-0.45.0/lib/libfilezilla/glue/registry.hpp
--- old/libfilezilla-0.44.0/lib/libfilezilla/glue/registry.hpp  2022-09-05 
15:38:02.000000000 +0200
+++ new/libfilezilla-0.45.0/lib/libfilezilla/glue/registry.hpp  2023-10-11 
10:26:52.000000000 +0200
@@ -65,6 +65,8 @@
                return key_.has_value();
        }
 
+       bool delete_value(std::wstring const& name);
+
 private:
        mutable std::optional<HKEY> key_;
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libfilezilla-0.44.0/lib/libfilezilla/glue/windows.hpp 
new/libfilezilla-0.45.0/lib/libfilezilla/glue/windows.hpp
--- old/libfilezilla-0.44.0/lib/libfilezilla/glue/windows.hpp   2021-07-02 
11:04:19.000000000 +0200
+++ new/libfilezilla-0.45.0/lib/libfilezilla/glue/windows.hpp   2023-10-11 
10:26:52.000000000 +0200
@@ -55,4 +55,8 @@
 #include <windows.h>
 #include <shellapi.h>
 
+#ifndef ERROR_DISK_QUOTA_EXCEEDED
+#define ERROR_DISK_QUOTA_EXCEEDED 1295
+#endif
+
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/hash.hpp 
new/libfilezilla-0.45.0/lib/libfilezilla/hash.hpp
--- old/libfilezilla-0.44.0/lib/libfilezilla/hash.hpp   2023-06-28 
15:00:47.000000000 +0200
+++ new/libfilezilla-0.45.0/lib/libfilezilla/hash.hpp   2023-10-11 
10:26:52.000000000 +0200
@@ -21,34 +21,49 @@
        sha512
 };
 
+enum class hmac_algorithm
+{
+       sha256
+};
+
+class buffer;
+
 /// Accumulator for hashing large amounts of data
 class FZ_PUBLIC_SYMBOL hash_accumulator final
 {
 public:
        /// Creates an initialized accumulator for the passed algorithm
        hash_accumulator(hash_algorithm algorithm);
+       hash_accumulator(hmac_algorithm algorithm, std::vector<uint8_t> const& 
key);
        ~hash_accumulator();
 
        hash_accumulator(hash_accumulator const&) = delete;
        hash_accumulator& operator=(hash_accumulator const&) = delete;
 
+       size_t digest_size() const;
+
        void reinit();
 
        void update(std::string_view const& data);
        void update(std::basic_string_view<uint8_t> const& data);
        void update(std::vector<uint8_t> const& data);
        void update(uint8_t const* data, size_t size);
+       void update(buffer const& data);
        void update(uint8_t in) {
                update(&in, 1);
        }
 
        /// Returns the raw digest and reinitializes the accumulator
        std::vector<uint8_t> digest();
+       void digest(uint8_t* out, size_t s);
 
        operator std::vector<uint8_t>() {
                return digest();
        }
 
+       bool is_digest(std::string_view const& ref);
+       bool is_digest(uint8_t const* ref, size_t s);
+
        template<typename T>
        hash_accumulator& operator<<(T && in) {
                update(std::forward<T>(in));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/http/client.hpp 
new/libfilezilla-0.45.0/lib/libfilezilla/http/client.hpp
--- old/libfilezilla-0.44.0/lib/libfilezilla/http/client.hpp    2023-04-24 
09:53:54.000000000 +0200
+++ new/libfilezilla-0.45.0/lib/libfilezilla/http/client.hpp    2023-10-11 
10:26:52.000000000 +0200
@@ -96,11 +96,12 @@
 
        /**
         * \brief Stops the client, deletes all requests.
-        *
-        * Must be called in the destructor of the derived class with 
keep_alive set to false.
         */
        void stop(bool keep_alive);
 
+       /// Must be called in the destructor of the derived class
+       void destroy();
+
 protected:
        virtual void on_alive() {}
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/process.hpp 
new/libfilezilla-0.45.0/lib/libfilezilla/process.hpp
--- old/libfilezilla-0.44.0/lib/libfilezilla/process.hpp        2022-07-20 
11:29:31.000000000 +0200
+++ new/libfilezilla-0.45.0/lib/libfilezilla/process.hpp        2023-10-11 
10:26:52.000000000 +0200
@@ -65,7 +65,7 @@
 
        /** \brief Creates instance with non-blocking event-based redirected 
communication
         *
-        * Event semantic akin to \sa fz::socket
+        * Event semantic akin to \ref fz::socket
         */
        process(thread_pool & pool, event_handler & handler);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/tls_info.hpp 
new/libfilezilla-0.45.0/lib/libfilezilla/tls_info.hpp
--- old/libfilezilla-0.44.0/lib/libfilezilla/tls_info.hpp       2022-12-12 
15:29:22.000000000 +0100
+++ new/libfilezilla-0.45.0/lib/libfilezilla/tls_info.hpp       2023-10-11 
10:26:52.000000000 +0200
@@ -13,7 +13,7 @@
 /**
  * \brief Represents all relevant information of a X.509 certificate as used 
by TLS.
  */
-class x509_certificate final
+class FZ_PUBLIC_SYMBOL x509_certificate final
 {
 public:
        /// A subject name, typically a DNS hostname
@@ -150,7 +150,7 @@
  * Includes flags whether the certificate chain is trusted by the system
  * trust store and whether the expected hostname matches.
  */
-class tls_session_info final
+class FZ_PUBLIC_SYMBOL tls_session_info final
 {
 public:
        tls_session_info() = default;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/tls_layer.hpp 
new/libfilezilla-0.45.0/lib/libfilezilla/tls_layer.hpp
--- old/libfilezilla-0.44.0/lib/libfilezilla/tls_layer.hpp      2023-06-28 
15:00:47.000000000 +0200
+++ new/libfilezilla-0.45.0/lib/libfilezilla/tls_layer.hpp      2023-10-11 
10:26:52.000000000 +0200
@@ -215,7 +215,7 @@
        static std::pair<std::string, std::string> generate_csr(native_string 
const& password, std::string const& distinguished_name, 
std::vector<std::string> const& hostnames, bool csr_as_pem = true, cert_type 
type = cert_type::any);
 
        /**
-        * /brief Creates a certificate from a CSR.
+        * \brief Creates a certificate from a CSR.
         *
         * If DN and hostnames are not given, the DN/hostnames from the CSR are 
taken.
         */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/util.hpp 
new/libfilezilla-0.45.0/lib/libfilezilla/util.hpp
--- old/libfilezilla-0.44.0/lib/libfilezilla/util.hpp   2021-08-31 
16:47:29.000000000 +0200
+++ new/libfilezilla-0.45.0/lib/libfilezilla/util.hpp   2023-10-11 
10:26:52.000000000 +0200
@@ -42,6 +42,9 @@
 
 void FZ_PUBLIC_SYMBOL random_bytes(size_t size, uint8_t* destination);
 
+class buffer;
+void FZ_PUBLIC_SYMBOL random_bytes(size_t size, buffer& destination);
+
 /** \brief Returns index of the least-significant set bit
  *
  * For example \c bitscan(12) returns 2
@@ -75,7 +78,7 @@
 }
 
 /**
- * /brief Helper to move-assign guaranteeing same member destruction order as 
the destructor.
+ * \brief Helper to move-assign guaranteeing same member destruction order as 
the destructor.
  *
  * The implicity-defined move operator performs a member-wise move
  * (class.copy.assign 15.8.2.12 in the C++17 standard), which can lead to 
members
@@ -96,6 +99,27 @@
        return *p;
 }
 
+/** \brief Securely wipes the memory.
+ *
+ * Effort has been undertaken such that the compiler does not optimize away
+ * a call to this function.
+ */
+void FZ_PUBLIC_SYMBOL wipe(void* p, size_t n);
+
+/** \brief Securely wipes the entire storage of the container
+ *
+ * Zeroes capacity() bytes.
+ */
+void FZ_PUBLIC_SYMBOL wipe(std::string & s);
+void FZ_PUBLIC_SYMBOL wipe(std::vector<uint8_t> & v);
+
+/** \brief Securely wipes the unused space in these containers
+ *
+ * If capacity() > size(), capacity() - size() bytes are zeroed.
+ */
+void FZ_PUBLIC_SYMBOL wipe_unused(std::string & s);
+void FZ_PUBLIC_SYMBOL wipe_unused(std::vector<uint8_t> & v);
+
 }
 
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/lib/local_filesys.cpp 
new/libfilezilla-0.45.0/lib/local_filesys.cpp
--- old/libfilezilla-0.44.0/lib/local_filesys.cpp       2022-09-13 
11:39:49.000000000 +0200
+++ new/libfilezilla-0.45.0/lib/local_filesys.cpp       2023-10-11 
10:26:52.000000000 +0200
@@ -391,6 +391,8 @@
                switch (err) {
                case ERROR_ACCESS_DENIED:
                        return result{result::noperm, err};
+               case ERROR_TOO_MANY_OPEN_FILES:
+                       return {result::resource_limit, err};
                default:
                        return result{result::other, err};
                }
@@ -413,6 +415,9 @@
                        case ENOTDIR:
                        case ENOENT:
                                return {result::nodir, err};
+                       case EMFILE:
+                       case ENFILE:
+                               return {result::resource_limit, err};
                        default:
                                return {result::other, err};
                }
@@ -461,6 +466,9 @@
                        case ENOTDIR:
                        case ENOENT:
                                return {result::nodir, err};
+                       case EMFILE:
+                       case ENFILE:
+                               return {result::resource_limit, err};
                        default:
                                return {result::other, err};
                }
@@ -945,6 +953,7 @@
        case ERROR_ACCESS_DENIED:
                return {result::noperm, err};
        case ERROR_DISK_FULL:
+       case ERROR_DISK_QUOTA_EXCEEDED:
                return {result::nospace, err};
        default:
                return {result::other, err};
@@ -1193,6 +1202,7 @@
                case ERROR_ACCESS_DENIED:
                        return {result::noperm, err};
                case ERROR_DISK_FULL:
+               case ERROR_DISK_QUOTA_EXCEEDED:
                        return {result::nospace, err};
                default:
                        return {result::other, err};
@@ -1209,6 +1219,7 @@
        case EACCES:
                return {result::noperm, err};
        case ENOSPC:
+       case EDQUOT:
                return {result::nospace, err};
        case ENOTDIR:
                return {result::nodir, err};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/lib/util.cpp 
new/libfilezilla-0.45.0/lib/util.cpp
--- old/libfilezilla-0.44.0/lib/util.cpp        2021-09-14 14:31:27.000000000 
+0200
+++ new/libfilezilla-0.45.0/lib/util.cpp        2023-10-11 10:26:52.000000000 
+0200
@@ -1,3 +1,4 @@
+#include "libfilezilla/buffer.hpp"
 #include "libfilezilla/util.hpp"
 #include "libfilezilla/time.hpp"
 
@@ -178,6 +179,15 @@
        }
 }
 
+void random_bytes(size_t size, buffer& destination)
+{
+       if (!size) {
+               return;
+       }
+       random_bytes(size, destination.get(size));
+       destination.add(size);
+}
+
 
 uint64_t bitscan(uint64_t v)
 {
@@ -216,4 +226,52 @@
        return nettle_memeql_sec(lhs.data(), rhs.data(), lhs.size()) != 0;
 }
 
+void wipe(void* p, size_t n)
+{
+       if (p && n) {
+#if FZ_WINDOWS
+               SecureZeroMemory(p, n);
+#else
+               // TODO: Consider using explicit_bzero or memset_s where 
available.
+               // Eventually C23's memset_explicit perhaps across all 
platforms?
+               volatile unsigned char* vp = reinterpret_cast<volatile unsigned 
char*>(p);
+               while (n--){
+                       *vp++ = 0;
+               }
+#endif
+       }
+}
+
+void wipe(std::string & s)
+{
+       size_t const orig_size = s.size();
+       s.resize(s.capacity());
+       wipe(s.data(), s.size());
+       s.resize(orig_size);
+}
+
+void wipe_unused(std::string & s)
+{
+       size_t const orig_size = s.size();
+       s.resize(s.capacity());
+       wipe(s.data() + orig_size, s.size() - orig_size);
+       s.resize(orig_size);
+}
+
+void wipe(std::vector<uint8_t> & v)
+{
+       size_t const orig_size = v.size();
+       v.resize(v.capacity());
+       wipe(v.data() + orig_size, v.size() - orig_size);
+       v.resize(orig_size);
+}
+
+void wipe_unused(std::vector<uint8_t> & v)
+{
+       size_t const orig_size = v.size();
+       v.resize(v.capacity());
+       wipe(v.data() + orig_size, v.size() - orig_size);
+       v.resize(orig_size);
+}
+
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/lib/windows/registry.cpp 
new/libfilezilla-0.45.0/lib/windows/registry.cpp
--- old/libfilezilla-0.44.0/lib/windows/registry.cpp    2022-04-01 
14:35:07.000000000 +0200
+++ new/libfilezilla-0.45.0/lib/windows/registry.cpp    2023-10-11 
10:26:52.000000000 +0200
@@ -143,4 +143,13 @@
        return key_ && RegSetValueExW(*key_, name.c_str(), 0, type, 
reinterpret_cast<unsigned char const*>(&value), size) == ERROR_SUCCESS;
 }
 
+bool regkey::delete_value(std::wstring const& name)
+{
+       if (!key_) {
+               return false;
+       }
+       auto ret = RegDeleteValueW(*key_, name.c_str());
+       return ret == ERROR_SUCCESS || ret == ERROR_FILE_NOT_FOUND;
+}
+
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfilezilla-0.44.0/locales/co.po 
new/libfilezilla-0.45.0/locales/co.po
--- old/libfilezilla-0.44.0/locales/co.po       2022-10-11 14:11:47.000000000 
+0200
+++ new/libfilezilla-0.45.0/locales/co.po       2023-10-11 10:26:52.000000000 
+0200
@@ -7,8 +7,8 @@
 msgstr ""
 "Project-Id-Version: libfilezilla in Corsican\n"
 "Report-Msgid-Bugs-To: https://trac.filezilla-project.org/\n";
-"POT-Creation-Date: 2022-09-13 14:47+0200\n"
-"PO-Revision-Date: 2022-08-25 15:55+0200\n"
+"POT-Creation-Date: 2023-07-10 11:34+0200\n"
+"PO-Revision-Date: 2023-07-04 16:53+0200\n"
 "Last-Translator: Patriccollu di Santa Maria è Sichè <https://github.com/";
 "Patriccollu/Lingua_Corsa-Infurmatica/#readme>\n"
 "Language-Team: Patriccollu di Santa Maria è Sichè\n"
@@ -17,15 +17,15 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Poedit 3.1.1\n"
+"X-Generator: Poedit 3.3.2\n"
 
-#: ../lib/tls_layer_impl.cpp:1664
+#: ../lib/tls_layer_impl.cpp:1674
 msgid "A certificate in the chain was signed using an insecure algorithm"
 msgstr ""
 "Un certificatu in a catena hè statu firmatu aduprendu una cudificazione "
 "micca sicura"
 
-#: ../lib/tls_layer_impl.cpp:1668
+#: ../lib/tls_layer_impl.cpp:1678
 msgid "An issuer in the certificate chain is not a certificate authority"
 msgstr ""
 "Un emettidore in a catena di certificatu ùn hè micca un auturità di "
@@ -39,27 +39,42 @@
 msgid "Bad file descriptor"
 msgstr "Discrittore gattive di u schedariu"
 
-#: ../lib/tls_layer_impl.cpp:1654
+#: ../lib/tls_layer_impl.cpp:1664
 msgid "Beware! Certificate has been revoked"
 msgstr "Fate casu ! U certificatu hè statu revocatu"
 
+#: ../lib/http/client.cpp:755
+msgid ""
+"Broken server, it claims to have processed a request before it got fully set"
+msgstr ""
+"Servitore dannighjatu chì dice ch’ellu hà trattatu una richiesta nanzu "
+"ch’ella sia cumpletamente definita"
+
 #: ../lib/socket_errors.cpp:108 ../lib/socket_errors.cpp:117
 msgid "Cannot assign requested address"
 msgstr "Ùn si pò micca impiegà l'indirizzu richiestu"
 
-#: ../lib/tls_layer_impl.cpp:313
+#: ../lib/http/client.cpp:959
+msgid "Cannot use writers without buffer pool"
+msgstr "Ùn si pò micca impiegà scrittori senza riserva di stampone"
+
+#: ../lib/tls_layer_impl.cpp:310
 msgid "Certificate file too big."
 msgstr "Schedariu di certificatu troppu maiò."
 
-#: ../lib/tls_layer_impl.cpp:1727
+#: ../lib/tls_layer_impl.cpp:1737
 msgid "Certificate of connection does not match expected certificate."
 msgstr "U certificatu di cunnessione ùn currisponde micca à quellu 
aspettatu."
 
-#: ../lib/tls_layer_impl.cpp:1660
+#: ../lib/tls_layer_impl.cpp:1670
 msgid "Certificate signature verification failed"
 msgstr "Fiascu di a verificazione di a firma di u certificatu"
 
-#: ../lib/tls_layer_impl.cpp:1201
+#: ../lib/http/client.cpp:981
+msgid "Chunk data improperly terminated"
+msgstr "Ingutuppu di dati interrottu scurrettamente"
+
+#: ../lib/tls_layer_impl.cpp:1211
 msgid "Client did not properly shut down TLS connection"
 msgstr "U cliente ùn hà micca chjosu currettamente a cunnessione TLS"
 
@@ -83,20 +98,64 @@
 msgid "Connection reset by peer"
 msgstr "Cunnessione iniziata torna da un paru"
 
-#: ../lib/tls_layer_impl.cpp:1861
+#: ../lib/tls_layer_impl.cpp:1874
 msgid "Could not add certificate to temporary trust list"
 msgstr ""
 "Ùn si pò micca aghjunghje u certificatu à a lista timpuraria di cunfidenza"
 
-#: ../lib/tls_layer_impl.cpp:1853
+#: ../lib/http/client.cpp:330 ../lib/http/client.cpp:344
+#, c-format
+msgid "Could not connect to '%s'"
+msgstr "Ùn si pò micca cunnette à « %s »"
+
+#: ../lib/jws.cpp:212
+#, c-format
+msgid ""
+"Could not convert private key to JWK, exporting ECC parameters failed: %s"
+msgstr ""
+"Ùn si pò micca convertisce a chjave privata versu JWK, l’espurtazione di 
i "
+"parametri ECC hà fiascata : %s"
+
+#: ../lib/jws.cpp:176
+#, c-format
+msgid ""
+"Could not convert private key to JWK, exporting RSA parameters failed: %s"
+msgstr ""
+"Ùn si pò micca convertisce a chjave privata versu JWK, l’espurtazione di 
i "
+"parametri RSA hà fiascata : %s"
+
+#: ../lib/jws.cpp:152
+#, c-format
+msgid "Could not convert private key to JWK, import failed: %s"
+msgstr ""
+"Ùn si pò micca convertisce a chjave privata versu JWK, l’impurtazione hà 
"
+"fiascata : %s"
+
+#: ../lib/jws.cpp:159
+msgid ""
+"Could not convert private key to JWK, only RSA and ECDSA private keys are "
+"supported."
+msgstr ""
+"Ùn si pò micca convertisce a chjave privata versu JWK, solu e chjavi 
private "
+"RSA è ECDSA sò accettate."
+
+#: ../lib/jws.cpp:219
+msgid ""
+"Could not convert private key to JWK, unsupported elliptic curve, only "
+"SECP256R1 is supported."
+msgstr ""
+"Ùn si pò micca convertisce a chjave privata versu JWK, curva ellittica non "
+"ricunnisciuta, solu SECP256R1 hè accettata."
+
+#: ../lib/tls_layer_impl.cpp:1866
 msgid "Could not copy certificate"
 msgstr "Ùn si pò micca cupià u certificatu"
 
-#: ../lib/tls_layer_impl.cpp:1347
+#: ../lib/tls_layer_impl.cpp:1357
 msgid "Could not extract validity period of certificate"
 msgstr "Ùn si pò micca estrae u periodu di validità di u certificatu"
 
-#: ../lib/tls_layer_impl.cpp:1414
+#: ../lib/tls_layer_impl.cpp:1424
 msgid ""
 "Could not get distinguished name of certificate issuer, "
 "gnutls_x509_get_issuer_dn failed"
@@ -104,7 +163,7 @@
 "Ùn si pò micca ottene u nome di l'emettore di u certificatu, "
 "gnutls_x509_get_issuer_dn hà fiascatu"
 
-#: ../lib/tls_layer_impl.cpp:1395
+#: ../lib/tls_layer_impl.cpp:1405
 msgid ""
 "Could not get distinguished name of certificate subject, gnutls_x509_get_dn "
 "failed"
@@ -112,19 +171,24 @@
 "Ùn si pò micca ottene u nome di sughjettu di u certificatu, "
 "gnutls_x509_get_dn hà fiascatu"
 
-#: ../lib/tls_layer_impl.cpp:306
+#: ../lib/tls_layer_impl.cpp:303
 msgid "Could not open certificate file."
 msgstr "Ùn si pò micca apre u schedariu di certificatu."
 
-#: ../lib/tls_layer_impl.cpp:336
+#: ../lib/tls_layer_impl.cpp:333
 msgid "Could not open key file."
 msgstr "Ùn si pò micca apre u schedariu di chjave."
 
-#: ../lib/tls_layer_impl.cpp:322
+#: ../lib/tls_layer_impl.cpp:319
 msgid "Could not read certificate file."
 msgstr "Ùn si pò micca leghje u schedariu di certificatu."
 
-#: ../lib/tls_layer_impl.cpp:348
+#: ../lib/http/client.cpp:624 ../lib/http/client.cpp:1134
+#, c-format
+msgid "Could not read from socket: %s"
+msgstr "Ùn si pò micca leghje u socket : %s"
+
+#: ../lib/tls_layer_impl.cpp:345
 msgid "Could not read key file."
 msgstr "Ùn si pò micca leghje u schedariu di chjave."
 
@@ -133,7 +197,7 @@
 msgid "Could not seek to offset %d within '%s'."
 msgstr "Ùn si pò micca andà à u spiazzamentu %d dentru « %s »."
 
-#: ../lib/tls_layer_impl.cpp:1635
+#: ../lib/tls_layer_impl.cpp:1645
 msgid "Could not sort peer certificates"
 msgstr "Ùn si pò micca classificà i certificati pari"
 
@@ -147,11 +211,25 @@
 msgid "Could not truncate '%s' to offset %d."
 msgstr "Ùn si pò micca ammuzzà « %s » à u spiazzamentu %d."
 
-#: ../lib/tls_layer_impl.cpp:1813
+#: ../lib/http/client.cpp:360 ../lib/http/client.cpp:473
+#, c-format
+msgid "Could not write to socket: %s"
+msgstr "Ùn si pò micca scrive in socket : %s"
+
+#: ../lib/http/client.cpp:474
+msgid "Disconnected from server"
+msgstr "Disghjuntu da u servitore"
+
+#: ../lib/http/client.cpp:451
+#, c-format
+msgid "Excess data read from '%s'"
+msgstr "Troppu dati letti nant’à « %s »"
+
+#: ../lib/tls_layer_impl.cpp:1823
 msgid "Failed to extract certificate trust path"
 msgstr "Fiascu per estrae u chjassu di cunfidenza di u certificatu"
 
-#: ../lib/tls_layer_impl.cpp:1806 ../lib/tls_layer_impl.cpp:1875
+#: ../lib/tls_layer_impl.cpp:1816 ../lib/tls_layer_impl.cpp:1888
 msgid "Failed to verify peer certificate"
 msgstr "Fiascu per verificà u certificatu paru"
 
@@ -159,34 +237,54 @@
 msgid "File descriptor not a socket"
 msgstr "Descrittore di schedariu ùn hè micca socket"
 
-#: ../lib/tls_layer_impl.cpp:574
+#: ../lib/tls_layer_impl.cpp:547
 #, c-format
 msgid "GnuTLS error %d"
 msgstr "Sbagliu GnuTLS %d"
 
-#: ../lib/tls_layer_impl.cpp:577
+#: ../lib/tls_layer_impl.cpp:550
 #, c-format
 msgid "GnuTLS error %d in %s"
 msgstr "Sbagliu GnuTLS %d in %s"
 
-#: ../lib/tls_layer_impl.cpp:569
+#: ../lib/tls_layer_impl.cpp:542
 #, c-format
 msgid "GnuTLS error %d in %s: %s"
 msgstr "Sbagliu GnuTLS %d in %s : %s"
 
-#: ../lib/tls_layer_impl.cpp:566
+#: ../lib/tls_layer_impl.cpp:539
 #, c-format
 msgid "GnuTLS error %d: %s"
 msgstr "Sbagliu GnuTLS %d : %s"
 
+#: ../lib/http/client.cpp:596 ../lib/http/client.cpp:653
+msgid "HTTP connection closed prematurely"
+msgstr "Cunnessione HTTP chjosa anticipatamente"
+
 #: ../lib/socket_errors.cpp:75
 msgid "Host is down"
 msgstr "L'ospite ùn funziona più"
 
+#: ../lib/http/client.cpp:221
+msgid "Hostname not in UTF-8"
+msgstr "Nome d’ospite micca in UTF-8"
+
+#: ../lib/http/client.cpp:683
+msgid "Internal error, bad state"
+msgstr "Sbagliu internu, statu gattivu"
+
 #: ../lib/socket_errors.cpp:61
 msgid "Interrupted by signal"
 msgstr "Interrottu da u signale"
 
+#: ../lib/http/client.cpp:877
+msgid "Invalid Content-Length"
+msgstr "Lunghezza di cuntenutu inaccettevule"
+
+#: ../lib/http/client.cpp:733
+msgid "Invalid HTTP Response"
+msgstr "Risposta HTTP inaccettevule"
+
 #: ../lib/socket_errors.cpp:49
 msgid "Invalid argument passed"
 msgstr "Parametru passatu inaccettevule"
@@ -195,6 +293,18 @@
 msgid "Invalid characters in hostname"
 msgstr "Caratteri inaccettevule in u nome d’ospite"
 
+#: ../lib/http/client.cpp:1041 ../lib/http/client.cpp:1046
+msgid "Invalid chunk size"
+msgstr "Dimensione di l’ingutuppu inaccettevule"
+
+#: ../lib/http/client.cpp:775
+msgid "Invalid line"
+msgstr "Linea inaccettevule"
+
+#: ../lib/http/client.cpp:742
+msgid "Invalid response code"
+msgstr "Codice di risposta inaccettevule"
+
 #: ../lib/socket_errors.cpp:82
 msgid "Invalid value for ai_flags"
 msgstr "Valore inaccettevule per ai_flags"
@@ -203,10 +313,14 @@
 msgid "Invalid value for hints"
 msgstr "Valore inaccettevule per i cunsiglii"
 
-#: ../lib/tls_layer_impl.cpp:341
+#: ../lib/tls_layer_impl.cpp:338
 msgid "Key file too big."
 msgstr "Schedariu di chjave troppu maiò."
 
+#: ../lib/http/client.cpp:1006
+msgid "Line length exceeded"
+msgstr "Lunghezza di a linea trapassata"
+
 #: ../lib/socket_errors.cpp:46
 msgid "Local address in use"
 msgstr "Indirizzu lucale impiegatu"
@@ -215,7 +329,21 @@
 msgid "Local endpoint has been closed"
 msgstr "U puntu lucale di cumpiitura hè statu chjosu"
 
-#: ../lib/tls_layer_impl.cpp:1711 ../lib/tls_layer_impl.cpp:1923
+#: ../lib/http/client.cpp:981 ../lib/http/client.cpp:993
+#: ../lib/http/client.cpp:999 ../lib/http/client.cpp:1006
+#: ../lib/http/client.cpp:1041 ../lib/http/client.cpp:1046
+#, c-format
+msgid "Malformed chunk data: %s"
+msgstr "Ingutuppu malcunciliu di dati : %s"
+
+#: ../lib/http/client.cpp:701 ../lib/http/client.cpp:707
+#: ../lib/http/client.cpp:775 ../lib/http/client.cpp:835
+#: ../lib/http/client.cpp:877
+#, c-format
+msgid "Malformed response header: %s"
+msgstr "In-capu di risposta malcunciliu : %s"
+
+#: ../lib/tls_layer_impl.cpp:1721 ../lib/tls_layer_impl.cpp:1936
 msgid "Man-in-the-Middle attack detected, aborting connection."
 msgstr ""
 "Abbandonu di a cunnessione per via d’un attaccu di l’intercettore 
(Man-in-"
@@ -261,6 +389,10 @@
 msgid "Not initialized, need to call WSAStartup"
 msgstr "Micca dimaratu, ci vole à chjamà WSAStartup"
 
+#: ../lib/http/client.cpp:707 ../lib/http/client.cpp:999
+msgid "Null character in line"
+msgstr "Caratteru nullu in a linea"
+
 #: ../lib/socket_errors.cpp:57
 msgid "Operation already in progress"
 msgstr "Operazione dighjà in corsu"
@@ -281,6 +413,10 @@
 msgid "Out of memory"
 msgstr "Mancanza di memoria"
 
+#: ../lib/http/client.cpp:225
+msgid "Path not in UTF-8"
+msgstr "Chjassu micca in UTF-8"
+
 #: ../lib/socket_errors.cpp:45 ../lib/socket_errors.cpp:54
 msgid "Permission denied"
 msgstr "Permessu ricusatu"
@@ -297,21 +433,21 @@
 msgid "Protocol not supported on given socket type"
 msgstr "Protocollu micca accettatu per u tipu di socket specificatu"
 
-#: ../lib/tls_layer_impl.cpp:589
+#: ../lib/tls_layer_impl.cpp:591
 #, c-format
 msgid "Received TLS alert from the client: %s (%d)"
 msgstr "Alerta TLS ricevuta da u cliente : %s (%d)"
 
-#: ../lib/tls_layer_impl.cpp:589
+#: ../lib/tls_layer_impl.cpp:591
 #, c-format
 msgid "Received TLS alert from the server: %s (%d)"
 msgstr "Alerta TLS ricevuta da u servitore : %s (%d)"
 
-#: ../lib/tls_layer_impl.cpp:1681
+#: ../lib/tls_layer_impl.cpp:1691
 msgid "Received certificate chain could not be verified."
 msgstr "A catena di certificatu ricevuta ùn pò micca esse verificata."
 
-#: ../lib/tls_layer_impl.cpp:1684
+#: ../lib/tls_layer_impl.cpp:1694
 #, c-format
 msgid ""
 "Received certificate chain could not be verified. Verification status is %d."
@@ -319,20 +455,24 @@
 "A catena di certificatu ricevuta ùn pò micca esse verificata. U statu di "
 "verificazione hè %d."
 
-#: ../lib/tls_layer_impl.cpp:594
+#: ../lib/tls_layer_impl.cpp:596
 #, c-format
 msgid "Received unknown TLS alert %d from the client"
 msgstr "Alerta TLS scunnisciuta %d ricevuta da u cliente"
 
-#: ../lib/tls_layer_impl.cpp:594
+#: ../lib/tls_layer_impl.cpp:596
 #, c-format
 msgid "Received unknown TLS alert %d from the server"
 msgstr "Alerta TLS scunnisciuta %d ricevuta da u servitore"
 
-#: ../lib/tls_layer_impl.cpp:1320
+#: ../lib/tls_layer_impl.cpp:1330 ../lib/tls_layer_impl.cpp:1851
 msgid "Remote certificate not trusted."
 msgstr "Certificatu alluntanatu micca degnu di cunfidenza."
 
+#: ../lib/http/client.cpp:217
+msgid "Request has no host"
+msgstr "A richiesta ùn hà micca ospite"
+
 #: ../lib/socket_errors.cpp:97
 msgid "Resolved protocol is unknown"
 msgstr "U protoccollu risoltu hè scunnisciutu"
@@ -341,11 +481,39 @@
 msgid "Resource temporarily unavailable"
 msgstr "Risorse timpurariamente indispunibule"
 
-#: ../lib/tls_layer_impl.cpp:1201
+#: ../lib/http/client.cpp:609
+msgid "Response too large"
+msgstr "A risposta hè troppu maiò"
+
+#: ../lib/tls_layer_impl.cpp:1211
 msgid "Server did not properly shut down TLS connection"
 msgstr "U servitore ùn hà micca chjosu currettamente a cunnessione TLS"
 
-#: ../lib/tls_layer_impl.cpp:1638
+#: ../lib/http/client.cpp:278
+#, c-format
+msgid "Server instructed client to wait %d seconds before sending next request"
+msgstr ""
+"U servitore hà dumandatu à u cliente d’aspettà %d seconde nanzu di mandà
 a "
+"prossima richiesta"
+
+#: ../lib/http/client.cpp:701
+msgid "Server not sending proper line endings"
+msgstr "U servitore ùn manda micca fine di linea currette"
+
+#: ../lib/http/digest.cpp:251
+#, c-format
+msgid "Server requested unsupported digest authentication algorithm: %s"
+msgstr ""
+"U servitore hà richiestu una cudificazione riassunta d’autenticazione 
micca "
+"accettata : %s"
+
+#: ../lib/http/digest.cpp:259
+#, c-format
+msgid "Server requested unsupported quality-of-protection: %s"
+msgstr ""
+"U servitore hà richiestu una qualità di prutezzione micca accettata : %s"
+
+#: ../lib/tls_layer_impl.cpp:1648
 msgid ""
 "Server sent unsorted certificate chain in violation of the TLS specifications"
 msgstr ""
@@ -360,6 +528,11 @@
 msgid "Socket already connected"
 msgstr "Socket dighjà cunnettu"
 
+#: ../lib/http/client.cpp:1172
+#, c-format
+msgid "Socket error: %s"
+msgstr "Sbagliu di socket : %s"
+
 #: ../lib/socket_errors.cpp:70
 msgid "Socket has been shut down"
 msgstr "Socket hè statu piantatu"
@@ -392,7 +565,7 @@
 msgid "The ai_socktype member is not supported"
 msgstr "U membru ai_socktype ùn hè micca accettatu"
 
-#: ../lib/tls_layer_impl.cpp:1676
+#: ../lib/tls_layer_impl.cpp:1686
 msgid ""
 "The certificate requires the server to include an OCSP status in its "
 "response, but the OCSP status is missing."
@@ -400,7 +573,7 @@
 "U certificatu richiede chì u servitore includi un statu OCSP in a so "
 "risposta, ma quessa manca."
 
-#: ../lib/tls_layer_impl.cpp:1672
+#: ../lib/tls_layer_impl.cpp:1682
 msgid "The server's hostname does not match the certificate's hostname"
 msgstr ""
 "U nome d'ospite di u servitore ùn currisponde micca à u nome d'ospite di u "
@@ -418,16 +591,37 @@
 msgid "The specified network name is no longer available"
 msgstr "U nome di reta specificatu ùn hè più dispunibule"
 
-#: ../lib/tls_layer_impl.cpp:1699
+#: ../lib/http/client.cpp:715 ../lib/http/client.cpp:792
+msgid "Too long header line"
+msgstr "Linea d’in-capu troppu longa"
+
+#: ../lib/http/client.cpp:798
+msgid "Too many header lines"
+msgstr "Troppu linee d’in-capu"
+
+#: ../lib/http/client.cpp:443
+#, c-format
+msgid "Unexpected end-of-file on '%s'"
+msgstr "Fine di schedariu inaspettata nant’à « %s »"
+
+#: ../lib/http/client.cpp:835
+msgid "Unknown transfer encoding"
+msgstr "Cudificazione di trasferimentu scunnisciuta"
+
+#: ../lib/tls_layer_impl.cpp:1709
 msgid "Unsupported certificate type"
 msgstr "Tipu di certificatu micca accettatu"
 
-#: ../lib/tls_layer_impl.cpp:1608
+#: ../lib/http/client.cpp:993
+msgid "Wrong line endings"
+msgstr "Fine di linea gattive"
+
+#: ../lib/tls_layer_impl.cpp:1618
 msgid "gnutls_certificate_get_peers returned no certificates"
 msgstr "gnutls_certificate_get_peers ùn hà restituitu nisunu certificatu"
 
-#: ../lib/tls_layer_impl.cpp:1979 ../lib/tls_layer_impl.cpp:2015
-#: ../lib/tls_layer_impl.cpp:2031 ../lib/tls_layer_impl.cpp:2047
+#: ../lib/tls_layer_impl.cpp:1992 ../lib/tls_layer_impl.cpp:2028
+#: ../lib/tls_layer_impl.cpp:2044 ../lib/tls_layer_impl.cpp:2060
 msgid "unknown"
 msgstr "scunnisciutu"
 

Reply via email to