Skip to content

S3 Encryption client does throw an error for ranges greater than EOF #200

Open
@ahmarsuhail

Description

@ahmarsuhail

Problem:

I created a 64KB (65536 bytes) with S3Encryption client, and then did

    S3Client s3Client = S3Client.builder().region(Region.EU_WEST_1).build();

    S3Client s3ECClient = S3EncryptionClient.builder()
             .kmsKeyId("xxx")
            .wrappedClient(s3Client)
            .wrappedAsyncClient(S3AsyncClient.builder().region(Region.EU_WEST_1).build())
           .enableLegacyUnauthenticatedModes(true)
           .build();



    ResponseInputStream<GetObjectResponse> inputStream = s3ECClient.getObject(GetObjectRequest.builder()
        .bucket("xxxx")
        .key("xxxx")
        .range("bytes=65536-65635").build());

So end of range 65635 is greater than EOF at 65536. And no error was thrown.

Creating a file with a regular S3 client and then doing

    ResponseInputStream<GetObjectResponse> inputStream = s3Client.getObject(GetObjectRequest.builder()
        .bucket("xxx")
        .key("xxxx")
        .range("bytes=65536-65635").build());

throws software.amazon.awssdk.services.s3.model.S3Exception: The requested range is not satisfiable (Service: S3, Status Code: 416, Request ID: which is what we expect to be thrown in S3A.

Solution:

S3 Encryption client should also throw a 416 range not satisfiable error.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions