Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package aws-crt-cpp for openSUSE:Factory 
checked in at 2026-08-14 22:06:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/aws-crt-cpp (Old)
 and      /work/SRC/openSUSE:Factory/.aws-crt-cpp.new.1258 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "aws-crt-cpp"

Fri Aug 14 22:06:21 2026 rev:59 rq:1371013 version:0.43.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/aws-crt-cpp/aws-crt-cpp.changes  2026-08-05 
19:07:39.691637590 +0200
+++ /work/SRC/openSUSE:Factory/.aws-crt-cpp.new.1258/aws-crt-cpp.changes        
2026-08-14 22:06:45.312519220 +0200
@@ -1,0 +2,13 @@
+Thu Aug 13 07:52:42 UTC 2026 - John Paul Adrian Glaubitz 
<[email protected]>
+
+- Update to version 0.43.5
+  * support opaque etags by @TingDaoK in (#664)
+  * Combine per-part CRCs for whole-object download checksum
+    validation by @TingDaoK in (#663)
+- from version 0.43.4
+  * Use latest as aws-crt-builder version by @sfod in (#660)
+  * fix resume token build by @TingDaoK in (#661)
+  * Fixing a typo that breaks a public API, but it only released
+    2 days ago and no downstream picks up the latest change.
+
+-------------------------------------------------------------------

Old:
----
  v0.43.3.tar.gz

New:
----
  v0.43.5.tar.gz

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

Other differences:
------------------
++++++ aws-crt-cpp.spec ++++++
--- /var/tmp/diff_new_pack.RalTG2/_old  2026-08-14 22:06:46.467560448 +0200
+++ /var/tmp/diff_new_pack.RalTG2/_new  2026-08-14 22:06:46.471560590 +0200
@@ -20,7 +20,7 @@
 %define library_soversion 1
 
 Name:           aws-crt-cpp
-Version:        0.43.3
+Version:        0.43.5
 Release:        0
 Summary:        AWS C++ wrapper for AWS SDK C libraries
 License:        Apache-2.0

++++++ v0.43.3.tar.gz -> v0.43.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aws-crt-cpp-0.43.3/VERSION 
new/aws-crt-cpp-0.43.5/VERSION
--- old/aws-crt-cpp-0.43.3/VERSION      2026-07-31 00:33:44.000000000 +0200
+++ new/aws-crt-cpp-0.43.5/VERSION      2026-08-11 19:52:30.000000000 +0200
@@ -1 +1 @@
-0.43.3
+0.43.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aws-crt-cpp-0.43.3/include/aws/crt/Api.h 
new/aws-crt-cpp-0.43.5/include/aws/crt/Api.h
--- old/aws-crt-cpp-0.43.3/include/aws/crt/Api.h        2026-07-31 
00:33:44.000000000 +0200
+++ new/aws-crt-cpp-0.43.5/include/aws/crt/Api.h        2026-08-11 
19:52:30.000000000 +0200
@@ -239,6 +239,13 @@
         AWS_CRT_CPP_API const char *ErrorDebugString(int error) noexcept;
 
         /**
+         * Gets the name of a CRT error code, e.g. "AWS_ERROR_S3_CANCELED"
+         * @param error error code to get the name for
+         * @return the name of the error code, or "Unknown Error Code" if 
unregistered
+         */
+        AWS_CRT_CPP_API const char *ErrorName(int error) noexcept;
+
+        /**
          * @return the value of the last aws error on the current thread. 
Return 0 if no aws-error raised before.
          */
         AWS_CRT_CPP_API int LastError() noexcept;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aws-crt-cpp-0.43.3/include/aws/crt/s3/S3.h 
new/aws-crt-cpp-0.43.5/include/aws/crt/s3/S3.h
--- old/aws-crt-cpp-0.43.3/include/aws/crt/s3/S3.h      2026-07-31 
00:33:44.000000000 +0200
+++ new/aws-crt-cpp-0.43.5/include/aws/crt/s3/S3.h      2026-08-11 
19:52:30.000000000 +0200
@@ -232,6 +232,9 @@
                 /** AWS_ERROR_SUCCESS on success, a CRT error code otherwise. 
*/
                 int errorCode;
 
+                /** True when the meta request completed without error. */
+                bool IsSuccess() const noexcept;
+
                 /** HTTP status of the request (the successful response on 
success, or the failed request on an S3 error
                  * response); 0 for other error codes. */
                 int responseStatus;
@@ -568,6 +571,26 @@
                 struct aws_s3_client_config *GetUnderlyingHandle() const 
noexcept;
 
                 /**
+                 * @return the region requests are signed for; "us-east-1" if 
never set.
+                 */
+                String GetRegion() const noexcept { return m_region; }
+
+                /**
+                 * @return the target part size in bytes, or 0 if unset.
+                 */
+                uint64_t GetPartSize() const noexcept;
+
+                /**
+                 * @return the multipart-upload threshold in bytes, or 0 if 
unset.
+                 */
+                uint64_t GetMultipartUploadThreshold() const noexcept;
+
+                /**
+                 * @return the target throughput in Gbps, or 0 if unset.
+                 */
+                double GetThroughputTargetGbps() const noexcept;
+
+                /**
                  * @return the configured retry-strategy flavor (Default if 
unset).
                  */
                 S3RetryStrategyType GetRetryStrategyType() const noexcept { 
return m_retryStrategyType; }
@@ -605,6 +628,14 @@
                     return m_clientShutdownCallback;
                 }
 
+                /**
+                 * @return the credentials provider this config signs with.
+                 */
+                std::shared_ptr<Auth::ICredentialsProvider> 
GetCredentialsProvider() const noexcept
+                {
+                    return m_credentialsProvider;
+                }
+
               private:
                 // The CRT C-struct storage (aws_s3_client_config plus the 
proxy,
                 // TCP keep-alive, and connection-monitoring option backings) 
lives
@@ -646,13 +677,16 @@
             class AWS_CRT_CPP_API S3MetaRequestOptions
             {
               public:
+                // Callbacks return bool (continue/abort) so C++ callers don't 
have to name the C
+                // AWS_OP_SUCCESS sentinel; the binding translates false to an 
aborted meta request.
+
                 /**
                  * Invoked once per delivered body chunk during a download.
                  * @param body the chunk of object bytes for this delivery.
                  * @param rangeStart byte offset within the object that this 
chunk starts at.
-                 * @return AWS_OP_SUCCESS to continue, or an error code to 
abort the meta request.
+                 * @return true to continue the meta request, false to abort 
it.
                  */
-                using BodyCallback = std::function<int(ByteCursor body, 
uint64_t rangeStart)>;
+                using BodyCallback = std::function<bool(ByteCursor body, 
uint64_t rangeStart)>;
 
                 /**
                  * Like BodyCallback, but the chunk is delivered with a 
borrowed
@@ -662,17 +696,19 @@
                  * @param body the chunk of object bytes for this delivery.
                  * @param rangeStart byte offset within the object that this 
chunk starts at.
                  * @param ticket borrowed handle to the CRT-owned buffer 
holding body.
-                 * @return AWS_OP_SUCCESS to continue, or an error code to 
abort the meta request.
+                 * @return true to continue the meta request, false to abort 
it.
                  */
-                using BodyCallbackEx = std::function<int(ByteCursor body, 
uint64_t rangeStart, S3BufferTicket &ticket)>;
+                using BodyCallbackEx =
+                    std::function<bool(ByteCursor body, uint64_t rangeStart, 
S3BufferTicket &ticket)>;
 
                 /**
                  * Invoked once when response headers are available.
                  * @param headers materialized snapshot of the response 
headers.
                  * @param responseStatus HTTP status code from the response.
-                 * @return AWS_OP_SUCCESS to continue, or an error code to 
abort the meta request.
+                 * @return true to continue the meta request, false to abort 
it.
                  */
-                using HeadersCallback = std::function<int(const 
Vector<Http::HttpHeader> &headers, int responseStatus)>;
+                using HeadersCallback =
+                    std::function<bool(const Vector<Http::HttpHeader> 
&headers, int responseStatus)>;
 
                 /**
                  * Invoked periodically as bytes flow.
@@ -719,6 +755,27 @@
                 S3MetaRequestOptions &SetSigningConfig(const 
Auth::AwsSigningConfig &config) noexcept;
 
                 /**
+                 * Configure this meta request's signing from a resolved 
endpoint's auth scheme. The
+                 * config is owned by this options object. Prefer this over 
SetSigningConfig for
+                 * endpoint-resolved signing, since the S3Express algorithm is 
not expressible via
+                 * the public SigningAlgorithm enum.
+                 *
+                 * @param region the client region, used as the signing-config 
base.
+                 * @param signingRegion signing region from the auth scheme, 
or empty to keep region.
+                 * @param signingName signing service name from the auth 
scheme, or empty to keep "s3".
+                 * @param isS3Express true for a directory bucket (use 
V4-S3Express); false for SigV4.
+                 * @param provider the credentials provider used during 
signing. Required; a null
+                 *        provider is recorded as an error and fails 
MakeMetaRequest.
+                 * @return this object, to allow chaining.
+                 */
+                S3MetaRequestOptions &SetSigningConfigFromEndpoint(
+                    const String &region,
+                    const String &signingRegion,
+                    const String &signingName,
+                    bool isS3Express,
+                    const std::shared_ptr<Auth::ICredentialsProvider> 
&provider) noexcept;
+
+                /**
                  * Set the checksum configuration for this meta request.
                  *
                  * @param config the checksum configuration.
@@ -1151,9 +1208,47 @@
                  */
                 int LastError() const noexcept;
 
+                /**
+                 * The four getters below report what this client was 
constructed with, copied from
+                 * its S3ClientConfig. aws_s3_client is opaque and a config is 
typically a local that
+                 * dies once construction returns, so a caller handed only the 
client would otherwise
+                 * have no way to learn how it was configured.
+                 *
+                 * @return the region this client signs requests for.
+                 */
+                String GetRegion() const noexcept { return m_region; }
+
+                /**
+                 * @return the target part size in bytes, or 0 if unset.
+                 */
+                uint64_t GetPartSize() const noexcept { return m_partSize; }
+
+                /**
+                 * @return the multipart-upload threshold in bytes, or 0 if 
unset.
+                 */
+                uint64_t GetMultipartUploadThreshold() const noexcept { return 
m_multipartUploadThreshold; }
+
+                /**
+                 * @return the target throughput in Gbps, or 0 if unset.
+                 */
+                double GetThroughputTargetGbps() const noexcept { return 
m_throughputTargetGbps; }
+
+                /**
+                 * @return the credentials provider this client signs with.
+                 */
+                std::shared_ptr<Auth::ICredentialsProvider> 
GetCredentialsProvider() const noexcept
+                {
+                    return m_credentialsProvider;
+                }
+
               private:
                 ScopedResource<struct aws_s3_client> m_client;
                 int m_lastError;
+                String m_region;
+                uint64_t m_partSize = 0;
+                uint64_t m_multipartUploadThreshold = 0;
+                double m_throughputTargetGbps = 0.0;
+                std::shared_ptr<Auth::ICredentialsProvider> 
m_credentialsProvider;
             };
 
             /**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aws-crt-cpp-0.43.3/source/Api.cpp 
new/aws-crt-cpp-0.43.5/source/Api.cpp
--- old/aws-crt-cpp-0.43.3/source/Api.cpp       2026-07-31 00:33:44.000000000 
+0200
+++ new/aws-crt-cpp-0.43.5/source/Api.cpp       2026-08-11 19:52:30.000000000 
+0200
@@ -461,6 +461,11 @@
             return aws_error_debug_str(error);
         }
 
+        const char *ErrorName(int error) noexcept
+        {
+            return aws_error_name(error);
+        }
+
         int LastError() noexcept
         {
             return aws_last_error();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aws-crt-cpp-0.43.3/source/s3/S3.cpp 
new/aws-crt-cpp-0.43.5/source/s3/S3.cpp
--- old/aws-crt-cpp-0.43.3/source/s3/S3.cpp     2026-07-31 00:33:44.000000000 
+0200
+++ new/aws-crt-cpp-0.43.5/source/s3/S3.cpp     2026-08-11 19:52:30.000000000 
+0200
@@ -23,6 +23,11 @@
     {
         namespace S3
         {
+            bool S3MetaRequestResult::IsSuccess() const noexcept
+            {
+                return errorCode == AWS_ERROR_SUCCESS;
+            }
+
             S3ChecksumConfig::S3ChecksumConfig() noexcept
                 // Trailer + CRC64NVME matches the AWS SDK default. A location
                 // of None disables the algorithm entirely.
@@ -146,6 +151,21 @@
                 return *this;
             }
 
+            uint64_t S3ClientConfig::GetPartSize() const noexcept
+            {
+                return m_impl->config.part_size;
+            }
+
+            uint64_t S3ClientConfig::GetMultipartUploadThreshold() const 
noexcept
+            {
+                return m_impl->config.multipart_upload_threshold;
+            }
+
+            double S3ClientConfig::GetThroughputTargetGbps() const noexcept
+            {
+                return m_impl->config.throughput_target_gbps;
+            }
+
             S3ClientConfig &S3ClientConfig::SetMemoryLimit(uint64_t bytes) 
noexcept
             {
                 m_impl->config.memory_limit_in_bytes = bytes;
@@ -270,6 +290,9 @@
             {
                 aws_s3_meta_request_options options = {};
                 aws_s3_checksum_config checksum = {};
+                aws_signing_config_aws endpointSigningConfig = {};
+                String endpointSigningRegion;
+                String endpointSigningName;
             };
 
             S3MetaRequestOptions::S3MetaRequestOptions(
@@ -316,6 +339,44 @@
                 return *this;
             }
 
+            S3MetaRequestOptions 
&S3MetaRequestOptions::SetSigningConfigFromEndpoint(
+                const String &region,
+                const String &signingRegion,
+                const String &signingName,
+                bool isS3Express,
+                const std::shared_ptr<Auth::ICredentialsProvider> &provider) 
noexcept
+            {
+                // Required: aws-c-s3's S3Express signing path has no error 
branch for a config with
+                // no credentials, so it would stall rather than fail.
+                if (provider == nullptr)
+                {
+                    m_lastError = AWS_ERROR_INVALID_ARGUMENT;
+                    return *this;
+                }
+
+                // Zeroed so a re-set leaves no stale cursors.
+                aws_signing_config_aws &config = m_impl->endpointSigningConfig;
+                AWS_ZERO_STRUCT(config);
+                aws_s3_init_default_signing_config(
+                    &config, ByteCursorFromString(region), 
provider->GetUnderlyingHandle());
+                // S3 requires single URI encoding, or keys with reserved 
characters fail with
+                // SignatureDoesNotMatch.
+                config.flags.use_double_uri_encode = false;
+                config.algorithm = isS3Express ? 
AWS_SIGNING_ALGORITHM_V4_S3EXPRESS : AWS_SIGNING_ALGORITHM_V4;
+
+                // Cursors must point into storage this object owns, not the 
caller's temporaries.
+                m_impl->endpointSigningRegion = signingRegion.empty() ? region 
: signingRegion;
+                config.region = 
ByteCursorFromString(m_impl->endpointSigningRegion);
+                if (!signingName.empty())
+                {
+                    m_impl->endpointSigningName = signingName;
+                    config.service = 
ByteCursorFromString(m_impl->endpointSigningName);
+                }
+
+                m_impl->options.signing_config = &config;
+                return *this;
+            }
+
             S3MetaRequestOptions 
&S3MetaRequestOptions::SetChecksumConfig(const S3ChecksumConfig &config) 
noexcept
             {
                 switch (config.GetLocation())
@@ -681,7 +742,12 @@
                 {
                     return AWS_OP_SUCCESS;
                 }
-                return data->headersCb(s_materializeHeaders(headers), 
responseStatus);
+                if (data->headersCb(s_materializeHeaders(headers), 
responseStatus))
+                {
+                    return AWS_OP_SUCCESS;
+                }
+                // Raise before returning: the CRT reads aws_last_error() on a 
non-zero return.
+                return aws_raise_error(AWS_ERROR_HTTP_CALLBACK_FAILURE);
             }
 
             static int s_onBody(
@@ -691,7 +757,15 @@
                 void *user_data)
             {
                 auto *data = static_cast<S3MetaRequestCallbackData 
*>(user_data);
-                return data->bodyCb ? data->bodyCb(*body, rangeStart) : 
AWS_OP_SUCCESS;
+                if (!data->bodyCb)
+                {
+                    return AWS_OP_SUCCESS;
+                }
+                if (data->bodyCb(*body, rangeStart))
+                {
+                    return AWS_OP_SUCCESS;
+                }
+                return aws_raise_error(AWS_ERROR_HTTP_CALLBACK_FAILURE);
             }
 
             static int s_onBodyEx(
@@ -705,13 +779,14 @@
                 {
                     return AWS_OP_SUCCESS;
                 }
-                // Stack-only, non-owning wrapper over the CRT's borrowed 
ticket
-                // (which may be null, ex. HEAD_OBJECT): no heap allocation 
and no
-                // reference taken on the per-chunk path. If the callback 
needs the
-                // buffer past its return, it calls ticket.Acquire(), which is 
the
-                // only path that takes a reference and allocates.
+                // Non-owning wrapper over the CRT's borrowed ticket (may be 
null, ex. HEAD_OBJECT).
+                // Takes no reference; the callback calls ticket.Acquire() to 
outlive its return.
                 S3BufferTicket ticket(info.ticket);
-                return data->bodyCbEx(*body, info.range_start, ticket);
+                if (data->bodyCbEx(*body, info.range_start, ticket))
+                {
+                    return AWS_OP_SUCCESS;
+                }
+                return aws_raise_error(AWS_ERROR_HTTP_CALLBACK_FAILURE);
             }
 
             static void s_onProgress(
@@ -812,7 +887,11 @@
                 Delete(data, ApiAllocator());
             }
 
-            S3Client::S3Client(const S3ClientConfig &config) noexcept : 
m_lastError(AWS_ERROR_SUCCESS)
+            S3Client::S3Client(const S3ClientConfig &config) noexcept
+                : m_lastError(AWS_ERROR_SUCCESS), 
m_region(config.GetRegion()), m_partSize(config.GetPartSize()),
+                  
m_multipartUploadThreshold(config.GetMultipartUploadThreshold()),
+                  m_throughputTargetGbps(config.GetThroughputTargetGbps()),
+                  m_credentialsProvider(config.GetCredentialsProvider())
             {
                 Allocator *allocator = ApiAllocator();
                 struct aws_s3_client_config *rawConfig = 
config.GetUnderlyingHandle();

Reply via email to