Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

AssumeRoleCredentialProvider replaces non-RuntimeException failures with TypeError

Open
#3,370 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

@lazerg is already working on this.

Since Oct 10, 2026.

  • #3372 by @lazerg — open

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
25/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Stale
Tech stack
aws, php

Research direction

The fault is in the rejection callback of AssumeRoleCredentialProvider::__invoke(), which type-hints RuntimeException. Run the reproduction script from the issue to see the TypeError. Done means Throwable is accepted, RuntimeException keeps its current handling, and other failures are rethrown unchanged with getPrevious() intact. Pull request #3372 already targets this, so check it before starting.

Written by the indexing model from the issue text.

Description

Describe the bug

When an STS request throws an exception that doesn’t extend RuntimeException, AssumeRoleCredentialProvider replaces it with a TypeError and loses the original exception.

Regression Issue

  • Select this option if this issue appears to be a regression.

Expected Behavior

I think other exceptions should pass through unchanged instead of being replaced with a type error.

Current Behavior

The example below fails with:

Argument #1 ($exception) must be of type RuntimeException, Exception given

The original exception is also lost: getPrevious() returns null.

Reproduction Steps

This example reproduces it without making any network requests or needing an AWS account.

Install aws/aws-sdk-php version 3.399.2, then run:

<?php

require 'vendor/autoload.php';

$client = new Aws\Sts\StsClient([
    'region' => 'us-east-1',
    'version' => '2011-06-15',
    'credentials' => ['key' => 'test', 'secret' => 'test'],
    'http_handler' => function () {
        throw new Exception('Request cancelled');
    },
]);

$provider = new Aws\Credentials\AssumeRoleCredentialProvider([
    'client' => $client,
    'assume_role_params' => [
        'RoleArn' => 'arn:aws:iam::123456789012:role/test',
        'RoleSessionName' => 'test',
    ],
]);

$provider()->wait();

Possible Solution

The rejection callback in AssumeRoleCredentialProvider::__invoke() only accepts RuntimeException. It could accept Throwable, keep the existing handling for RuntimeException, and rethrow other failures unchanged.

Additional Information/Context

The same callback is still present on master.

SDK version used

3.399.2

Environment details (Version of PHP (php -v)? OS name and version, etc.)

PHP 8.4.25, Ubuntu 24.04.

Generated by Codex, and reviewed by @binaryfire.

Dominant language
PHP
Stars
6.2k
Forks
1.3k
Avg merge
17h 23m
Merged PRs (30d)
11

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from aws/aws-sdk-php

All issues in aws/aws-sdk-php

Similar issues

More PHP issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.