Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package aws-c-mqtt for openSUSE:Factory checked in at 2026-08-31 15:58:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/aws-c-mqtt (Old) and /work/SRC/openSUSE:Factory/.aws-c-mqtt.new.1265 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "aws-c-mqtt" Mon Aug 31 15:58:05 2026 rev:20 rq:1374824 version:0.16.2 Changes: -------- --- /work/SRC/openSUSE:Factory/aws-c-mqtt/aws-c-mqtt.changes 2026-08-14 22:06:37.808251363 +0200 +++ /work/SRC/openSUSE:Factory/.aws-c-mqtt.new.1265/aws-c-mqtt.changes 2026-08-31 15:58:06.751933772 +0200 @@ -1,0 +2,7 @@ +Tue Aug 25 14:01:32 UTC 2026 - John Paul Adrian Glaubitz <[email protected]> + +- Update to version 0.16.2 + * Validate SUBACK/UNSUBACK reason code count by @sfod in (#432) + * CI/CD improvements by @azkrishpy in (#434) + +------------------------------------------------------------------- Old: ---- v0.16.1.tar.gz New: ---- v0.16.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ aws-c-mqtt.spec ++++++ --- /var/tmp/diff_new_pack.1A65Md/_old 2026-08-31 15:58:07.509960241 +0200 +++ /var/tmp/diff_new_pack.1A65Md/_new 2026-08-31 15:58:07.511960311 +0200 @@ -18,7 +18,7 @@ %global library_version 1_0_0 Name: aws-c-mqtt -Version: 0.16.1 +Version: 0.16.2 Release: 0 Summary: AWS C99 implementation of the MQTT 3.1.1 specification License: Apache-2.0 ++++++ v0.16.1.tar.gz -> v0.16.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-mqtt-0.16.1/.github/workflows/block-needs-review.yml new/aws-c-mqtt-0.16.2/.github/workflows/block-needs-review.yml --- old/aws-c-mqtt-0.16.1/.github/workflows/block-needs-review.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/aws-c-mqtt-0.16.2/.github/workflows/block-needs-review.yml 2026-08-18 03:11:38.000000000 +0200 @@ -0,0 +1,12 @@ +name: Block needs-review merges + +on: + pull_request: + types: [opened, synchronize, reopened, labeled, unlabeled] + +permissions: + pull-requests: read + +jobs: + gate: + uses: awslabs/aws-crt-builder/.github/workflows/block-needs-review-label.yml@main diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-mqtt-0.16.1/.github/workflows/check-abi.yml new/aws-c-mqtt-0.16.2/.github/workflows/check-abi.yml --- old/aws-c-mqtt-0.16.1/.github/workflows/check-abi.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/aws-c-mqtt-0.16.2/.github/workflows/check-abi.yml 2026-08-18 03:11:38.000000000 +0200 @@ -0,0 +1,41 @@ +name: Check ABI compliance + +on: + pull_request: + types: [opened, synchronize, reopened] + +concurrency: + group: check-abi-${{ github.event.pull_request.number }} + cancel-in-progress: true + +env: + PACKAGE_NAME: aws-c-mqtt + CRT_CI_ROLE: ${{ secrets.CRT_CI_ROLE_ARN }} + AWS_DEFAULT_REGION: us-east-1 + +permissions: + id-token: write + contents: read + pull-requests: write + +jobs: + check-abi: + name: check-abi + runs-on: ubuntu-24.04 + steps: + - uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ env.CRT_CI_ROLE }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check ABI + uses: awslabs/aws-crt-builder/.github/actions/check-abi@main + with: + lib-name: ${{ env.PACKAGE_NAME }} + builder-version: latest + builder-source: releases diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-mqtt-0.16.1/.github/workflows/release.yml new/aws-c-mqtt-0.16.2/.github/workflows/release.yml --- old/aws-c-mqtt-0.16.1/.github/workflows/release.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/aws-c-mqtt-0.16.2/.github/workflows/release.yml 2026-08-18 03:11:38.000000000 +0200 @@ -0,0 +1,44 @@ +name: Release + +on: + workflow_dispatch: + inputs: + dry-run: + description: 'Compute and summarize the bump/version but do not commit, tag, or publish anything.' + required: false + default: 'false' + +concurrency: + group: ${{ github.workflow }} + cancel-in-progress: false + +env: + PACKAGE_NAME: aws-c-mqtt + CRT_CI_ROLE: ${{ secrets.CRT_CI_ROLE_ARN }} + AWS_DEFAULT_REGION: us-east-1 + +permissions: + id-token: write + contents: write + pull-requests: read + +jobs: + release: + name: release + runs-on: ubuntu-24.04 + steps: + - uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ env.CRT_CI_ROLE }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Release + uses: awslabs/aws-crt-builder/.github/actions/auto-release@main + with: + lib-name: ${{ env.PACKAGE_NAME }} + dry-run: ${{ inputs.dry-run }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-mqtt-0.16.1/CMakeLists.txt new/aws-c-mqtt-0.16.2/CMakeLists.txt --- old/aws-c-mqtt-0.16.1/CMakeLists.txt 2026-07-30 22:01:05.000000000 +0200 +++ new/aws-c-mqtt-0.16.2/CMakeLists.txt 2026-08-18 03:11:38.000000000 +0200 @@ -68,6 +68,7 @@ aws_add_sanitizers(${PROJECT_NAME}) # We are not ABI stable yet +# TODO: switch to VERSION derived from the VERSION file (via aws_get_version) once SOVERSION is set explicitly, to avoid changing the SONAME. set_target_properties(${PROJECT_NAME} PROPERTIES VERSION 1.0.0) target_include_directories(${PROJECT_NAME} PUBLIC diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-mqtt-0.16.1/VERSION new/aws-c-mqtt-0.16.2/VERSION --- old/aws-c-mqtt-0.16.1/VERSION 1970-01-01 01:00:00.000000000 +0100 +++ new/aws-c-mqtt-0.16.2/VERSION 2026-08-18 03:11:38.000000000 +0200 @@ -0,0 +1 @@ +0.16.2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-mqtt-0.16.1/source/v5/mqtt5_client.c new/aws-c-mqtt-0.16.2/source/v5/mqtt5_client.c --- old/aws-c-mqtt-0.16.1/source/v5/mqtt5_client.c 2026-07-30 22:01:05.000000000 +0200 +++ new/aws-c-mqtt-0.16.2/source/v5/mqtt5_client.c 2026-08-18 03:11:38.000000000 +0200 @@ -3512,6 +3512,28 @@ return AWS_OP_SUCCESS; } +static bool s_aws_mqtt5_client_validate_ack_reason_code_count( + const struct aws_mqtt5_operation *operation, + enum aws_mqtt5_packet_type packet_type, + const void *packet_view) { + + if (packet_type == AWS_MQTT5_PT_SUBACK) { + const struct aws_mqtt5_packet_subscribe_view *subscribe_view = operation->packet_view; + const struct aws_mqtt5_packet_suback_view *suback_view = packet_view; + + return subscribe_view->subscription_count == suback_view->reason_code_count; + } + + if (packet_type == AWS_MQTT5_PT_UNSUBACK) { + const struct aws_mqtt5_packet_unsubscribe_view *unsubscribe_view = operation->packet_view; + const struct aws_mqtt5_packet_unsuback_view *unsuback_view = packet_view; + + return unsubscribe_view->topic_filter_count == unsuback_view->reason_code_count; + } + + return true; +} + void aws_mqtt5_client_operational_state_handle_ack( struct aws_mqtt5_client_operational_state *client_operational_state, aws_mqtt5_packet_id_t packet_id, @@ -3519,8 +3541,10 @@ const void *packet_view, int error_code) { + struct aws_mqtt5_client *client = client_operational_state->client; + if (packet_type == AWS_MQTT5_PT_PUBACK) { - aws_mqtt5_client_flow_control_state_on_puback(client_operational_state->client); + aws_mqtt5_client_flow_control_state_on_puback(client); } struct aws_hash_element *elem = NULL; @@ -3530,15 +3554,11 @@ AWS_LOGF_ERROR( AWS_LS_MQTT5_CLIENT, "id=%p: received an ACK for an unknown operation with id %d", - (void *)client_operational_state->client, + (void *)client, (int)packet_id); return; } else { - AWS_LOGF_TRACE( - AWS_LS_MQTT5_CLIENT, - "id=%p: Processing ACK with id %d", - (void *)client_operational_state->client, - (int)packet_id); + AWS_LOGF_TRACE(AWS_LS_MQTT5_CLIENT, "id=%p: Processing ACK with id %d", (void *)client, (int)packet_id); } struct aws_mqtt5_operation *operation = elem->value; @@ -3546,7 +3566,33 @@ aws_linked_list_remove(&operation->node); aws_hash_table_remove(&client_operational_state->unacked_operations_table, &packet_id, NULL, NULL); - s_complete_operation(client_operational_state->client, operation, error_code, packet_type, packet_view); + if (!s_aws_mqtt5_client_validate_ack_reason_code_count(operation, packet_type, packet_view)) { + AWS_LOGF_ERROR( + AWS_LS_MQTT5_CLIENT, + "id=%p: received a %s with a reason code count that does not match the acknowledged request; treating as a " + "protocol error and disconnecting", + (void *)client, + aws_mqtt5_packet_type_to_c_string(packet_type)); + + /* + * We must complete the operation explicitly rather than relying on the shutdown's operational-state reset: + * a subscribe/unsubscribe is retainable under the default offline queue policy, so the reset would requeue it + * for retry, potentially producing an endless disconnect/reconnect/resubscribe loop against a misbehaving + * broker. + */ + s_complete_operation(client, operation, AWS_ERROR_MQTT5_DECODE_PROTOCOL_ERROR, AWS_MQTT5_PT_NONE, NULL); + + if (s_should_client_disconnect_cleanly(client)) { + s_aws_mqtt5_client_shutdown_channel_clean( + client, AWS_ERROR_MQTT5_DECODE_PROTOCOL_ERROR, AWS_MQTT5_DRC_PROTOCOL_ERROR); + } else { + s_aws_mqtt5_client_shutdown_channel(client, AWS_ERROR_MQTT5_DECODE_PROTOCOL_ERROR); + } + + return; + } + + s_complete_operation(client, operation, error_code, packet_type, packet_view); } bool aws_mqtt5_client_are_negotiated_settings_valid(const struct aws_mqtt5_client *client) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-mqtt-0.16.1/tests/v5/mqtt5_client_tests.c new/aws-c-mqtt-0.16.2/tests/v5/mqtt5_client_tests.c --- old/aws-c-mqtt-0.16.1/tests/v5/mqtt5_client_tests.c 2026-07-30 22:01:05.000000000 +0200 +++ new/aws-c-mqtt-0.16.2/tests/v5/mqtt5_client_tests.c 2026-08-18 03:11:38.000000000 +0200 @@ -5529,7 +5529,7 @@ struct aws_mqtt5_packet_suback_view suback_view = { .packet_id = subscribe_view->packet_id, - .reason_code_count = 1, + .reason_code_count = subscribe_view->subscription_count, .reason_codes = s_alias_reason_codes, }; @@ -5727,7 +5727,7 @@ struct aws_mqtt5_packet_suback_view suback_view = { .packet_id = subscribe_view->packet_id, - .reason_code_count = 1, + .reason_code_count = subscribe_view->subscription_count, .reason_codes = s_alias_reason_codes, }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-mqtt-0.16.1/tests/v5/mqtt5_to_mqtt3_adapter_tests.c new/aws-c-mqtt-0.16.2/tests/v5/mqtt5_to_mqtt3_adapter_tests.c --- old/aws-c-mqtt-0.16.1/tests/v5/mqtt5_to_mqtt3_adapter_tests.c 2026-07-30 22:01:05.000000000 +0200 +++ new/aws-c-mqtt-0.16.2/tests/v5/mqtt5_to_mqtt3_adapter_tests.c 2026-08-18 03:11:38.000000000 +0200 @@ -3169,6 +3169,16 @@ s_wait_for_n_adapter_operation_events(&fixture, AWS_MQTT3_OET_SUBSCRIBE_COMPLETE, 1); + struct aws_mqtt3_operation_event expected_events[] = { + { + .type = AWS_MQTT3_OET_SUBSCRIBE_COMPLETE, + .error_code = AWS_ERROR_MQTT5_DECODE_PROTOCOL_ERROR, + }, + }; + + ASSERT_SUCCESS(s_aws_mqtt5_to_mqtt3_adapter_test_fixture_verify_operation_sequence_contains( + &fixture, AWS_ARRAY_SIZE(expected_events), expected_events)); + aws_mqtt5_to_mqtt3_adapter_test_fixture_clean_up(&fixture); aws_mqtt_library_clean_up(); @@ -3885,7 +3895,7 @@ struct aws_mqtt5_packet_unsuback_view unsuback_view = { .packet_id = unsubscribe_view->packet_id, - .reason_code_count = AWS_ARRAY_SIZE(mqtt5_unsuback_codes), + .reason_code_count = unsubscribe_view->topic_filter_count, .reason_codes = mqtt5_unsuback_codes, };
