aws / aws/aws-sdk-java-v2

`DefaultAttributeConvererProvider` throws `IndexOutOfBoundException` on `Object` class

Offen
#2,296 9 Kommentare 5 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
bug dynamodb-enhanced p2
Vorherrschende Sprache
Java
Sterne
2.6k
Forks
1k
Ø Merge
2 T. 9 Std.
Gemergte PRs (30 T.)
51

Beschreibung

`DefaultAttributeConvererProvider` of dynamodb retrieves its matched types incorrectly.
This causes it to create a wrong converter for some generic types.

## Describe the bug

The minimal reproduction scenario is:

```
new DefaultAttributeConverterProvider().converterFor(EnhancedType.of(Object.class));
```

It generates the following stacktrace:

```
java.lang.IndexOutOfBoundsException: Index: 0
at java.util.Collections$EmptyList.get(Collections.java:4456)
at software.amazon.awssdk.enhanced.dynamodb.DefaultAttributeConverterProvider.createMapConverter(DefaultAttributeConverterProvider.java:179)
at software.amazon.awssdk.enhanced.dynamodb.DefaultAttributeConverterProvider.findConverter(DefaultAttributeConverterProvider.java:149)
at software.amazon.awssdk.enhanced.dynamodb.DefaultAttributeConverterProvider.converterFor(DefaultAttributeConverterProvider.java:133)
```

## Possible Solution

I think the code should be:

```
if (type.rawClass() == Map.class) {
```

Be aware this not only happens here, but also appears on other places in this class.

The problem is caused because the [`DefaultAttributeConverterProvider`](https://github.com/aws/aws-sdk-java-v2/blob/master/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/DefaultAttributeConverterProvider.java#L148) is using the `isAssignableFrom` call. It writes:

```
if (type.rawClass().isAssignableFrom(Map.class)) {
```

## Context

Found this while writing with a converer.

## Your Environment
* AWS Java SDK version used: latest

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne in services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/DefaultAttributeConverterProvider.java, insbesondere bei findConverter und createMapConverter an den Stellen im Stack-Trace. Reproduziere converterFor(EnhancedType.of(Object.class)) und untersuche die anderen im Issue genannten isAssignableFrom-Prüfungen. Als erledigt gilt die Aufgabe, wenn Object und die betroffenen generischen Typen nicht mehr IndexOutOfBoundsException auslösen oder einen falschen Converter auswählen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
java
Bereich
database
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
38/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.