Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package aws-c-s3 for openSUSE:Factory checked in at 2025-12-31 10:47:46 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/aws-c-s3 (Old) and /work/SRC/openSUSE:Factory/.aws-c-s3.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "aws-c-s3" Wed Dec 31 10:47:46 2025 rev:34 rq:1324861 version:0.11.3 Changes: -------- --- /work/SRC/openSUSE:Factory/aws-c-s3/aws-c-s3.changes 2025-12-01 11:15:32.684153524 +0100 +++ /work/SRC/openSUSE:Factory/.aws-c-s3.new.1928/aws-c-s3.changes 2025-12-31 10:48:25.348926755 +0100 @@ -1,0 +2,7 @@ +Tue Dec 9 08:45:18 UTC 2025 - John Paul Adrian Glaubitz <[email protected]> + +- Update to version 0.11.3 + * Disable hedging for s3 express by @TingDaoK in (#602) + * Don't crash for server error. Handle it nicely by @TingDaoK in (#604) + +------------------------------------------------------------------- Old: ---- v0.11.2.tar.gz New: ---- v0.11.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ aws-c-s3.spec ++++++ --- /var/tmp/diff_new_pack.Zv2NT3/_old 2025-12-31 10:48:25.944951145 +0100 +++ /var/tmp/diff_new_pack.Zv2NT3/_new 2025-12-31 10:48:25.948951309 +0100 @@ -19,7 +19,7 @@ %define library_version 1.0.0 %define library_soversion 0unstable Name: aws-c-s3 -Version: 0.11.2 +Version: 0.11.3 Release: 0 Summary: AWS Cross-Platform, C99 wrapper for cryptography primitives License: Apache-2.0 ++++++ v0.11.2.tar.gz -> v0.11.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-s3-0.11.2/source/s3_auto_ranged_put.c new/aws-c-s3-0.11.3/source/s3_auto_ranged_put.c --- old/aws-c-s3-0.11.2/source/s3_auto_ranged_put.c 2025-11-25 02:17:00.000000000 +0100 +++ new/aws-c-s3-0.11.3/source/s3_auto_ranged_put.c 2025-11-27 00:19:22.000000000 +0100 @@ -464,8 +464,11 @@ struct aws_http_stream *stream, int error_code) { struct aws_s3_request *request = connection->request; - if (request->request_tag == AWS_S3_AUTO_RANGED_PUT_REQUEST_TAG_PART) { + if (request->request_tag == AWS_S3_AUTO_RANGED_PUT_REQUEST_TAG_PART && !request->meta_request->is_express) { /* TODO: the single part upload may also be improved from a timeout as multipart. */ + /* Note: For S3express, server responses random ETag. Killing the connection in the middle may cause server + * receive two same part and result in confusing during complete MPU with etag doesn't match. + * Disable the first byte timeout for s3 express. */ aws_s3_client_update_upload_part_timeout(request->meta_request->client, request, error_code); } aws_s3_meta_request_send_request_finish_default(connection, stream, error_code); @@ -1216,11 +1219,13 @@ aws_s3_meta_request_lock_synced_data(meta_request); struct aws_s3_mpu_part_info *part = NULL; aws_array_list_get_at(&auto_ranged_put->synced_data.part_list, &part, request->part_number - 1); + /** + * 1. If request retries, get the checksum context from the previous attempt to reuse it. In case of the the + * request body in memory mangled + * 2. If this is the first attempt, the context is initialized from the previous prepare step. + **/ AWS_ASSERT(part != NULL && part->checksum_context != NULL); - /* Use checksum context if available, otherwise NULL for new parts */ checksum_context = part->checksum_context; - /* If checksum already calculated, it means either the part being retried or the part resumed from list - * parts. Keep reusing the old checksum in case of the request body in memory mangled */ aws_s3_meta_request_unlock_synced_data(meta_request); } /* END CRITICAL SECTION */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-s3-0.11.2/source/s3_checksum_context.c new/aws-c-s3-0.11.3/source/s3_checksum_context.c --- old/aws-c-s3-0.11.2/source/s3_checksum_context.c 2025-11-25 02:17:00.000000000 +0100 +++ new/aws-c-s3-0.11.3/source/s3_checksum_context.c 2025-11-27 00:19:22.000000000 +0100 @@ -182,7 +182,6 @@ return checksum_cursor; } s_lock_synced_data(context); - /* If not previous calculated */ if (context->synced_data.checksum_calculated) { checksum_cursor = aws_byte_cursor_from_buf(&context->synced_data.base64_checksum); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-s3-0.11.2/source/s3_meta_request.c new/aws-c-s3-0.11.3/source/s3_meta_request.c --- old/aws-c-s3-0.11.2/source/s3_meta_request.c 2025-11-25 02:17:00.000000000 +0100 +++ new/aws-c-s3-0.11.3/source/s3_meta_request.c 2025-11-27 00:19:22.000000000 +0100 @@ -1188,7 +1188,10 @@ options.on_metrics = s_s3_meta_request_stream_metrics; } options.on_complete = s_s3_meta_request_stream_complete; - if (request->request_type == AWS_S3_REQUEST_TYPE_UPLOAD_PART) { + if (request->request_type == AWS_S3_REQUEST_TYPE_UPLOAD_PART && !meta_request->is_express) { + /* Note: For S3express, server responses random ETag. Killing the connection in the middle may cause server + * receive two same part and result in confusing during complete MPU with etag doesn't match. + * Disable the first byte timeout for s3 express. */ options.response_first_byte_timeout_ms = aws_atomic_load_int(&meta_request->client->upload_timeout_ms); request->upload_timeout_ms = (size_t)options.response_first_byte_timeout_ms; } @@ -1408,13 +1411,34 @@ aws_error_str(aws_last_error())); return AWS_OP_ERR; } else { + /* Make we get what we ask for. */ if (request->part_range_end != 0) { - AWS_FATAL_ASSERT(request->part_range_start == object_range_start); + if (request->part_range_start != object_range_start) { + /* Log the error */ + AWS_LOGF_ERROR( + AWS_LS_S3_META_REQUEST, + "id=%p: Part range start mismatch. Expected: %" PRIu64 ", Actual: %" PRIu64 "", + (void *)meta_request, + request->part_range_start, + object_range_start); + return aws_raise_error(AWS_ERROR_S3_INVALID_CONTENT_RANGE_HEADER); + } if (request->part_range_end != object_range_end) { - /* In the case where the object size is less than the range requested, it will return the bytes - * to the object size. Range is inclusive */ - AWS_FATAL_ASSERT(object_range_start + object_size - 1 == object_range_end); - AWS_FATAL_ASSERT(request->part_range_end > object_range_end); + /* In the case where the object size is less than the range requested. It must be return the + * last part to the end of the object. */ + if (object_size != object_range_end + 1 || request->part_range_end < object_range_end) { + /* Something went wrong if it's matching. Log the error. */ + AWS_LOGF_ERROR( + AWS_LS_S3_META_REQUEST, + "id=%p: Part range end mismatch. Expected: %" PRIu64 ", Actual: %" PRIu64 + ", while object size is: " + "%" PRIu64 ".", + (void *)meta_request, + request->part_range_end, + object_range_end, + object_size); + return aws_raise_error(AWS_ERROR_S3_INVALID_CONTENT_RANGE_HEADER); + } } } } @@ -2056,7 +2080,17 @@ meta_request->io_threaded_data.next_deliver_range_start = delivery_range_start; } /* Make sure the response body is delivered in the sequential order */ - AWS_FATAL_ASSERT(delivery_range_start == meta_request->io_threaded_data.next_deliver_range_start); + if (delivery_range_start != meta_request->io_threaded_data.next_deliver_range_start) { + /* Unexpected error, log the error */ + AWS_LOGF_ERROR( + AWS_LS_S3_META_REQUEST, + "id=%p: Unexpected code error. Please report the error to the team, " + "delivery_range_start:%" PRIu64 ", next_deliver_range_start:%" PRIu64 ".", + (void *)meta_request, + delivery_range_start, + meta_request->io_threaded_data.next_deliver_range_start); + error_code = AWS_ERROR_INVALID_STATE; + } meta_request->io_threaded_data.next_deliver_range_start += response_body.len; if (error_code == AWS_ERROR_SUCCESS && response_body.len > 0) {
