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,
     };
 

Reply via email to