Skip to content

TransferManager changes in 1.11.486 break ABIΒ #3258

@0x9fff00

Description

@0x9fff00

Describe the bug

1e2db20#diff-3952e6db12d0030871dfd112b58cfdc90dbd5ee8cbd9e8e676f5f52228ed0e25 adds an optional checksum parameter to TransferManager::UploadFile and TransferManager::CreateUploadFileHandle, and changes the state parameter of TransferManager::SetChecksumForAlgorithm to be a reference. These changes break the ABI of libaws-cpp-sdk-transfer.so.

Regression Issue

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

Expected Behavior

ABI breaks should only happen with a major version bump and soname change.

Current Behavior

The ABI was broken in a patch release and without a soname change. This causes errors with programs that dynamically link to the affected functions, such as Nix, if they were compiled with older versions of the AWS SDK:

$ nix-channel --help
nix-channel: symbol lookup error: /usr/lib/libnixstore.so: undefined symbol: _ZN3Aws8Transfer15TransferManager10UploadFileERKSt10shared_ptrISdERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESD_SD_RKSt3mapISB_SB_St4lessISB_ESaISt4pairISC_SB_EEERKS2_IKNS_6Client18AsyncCallerContextEE

Reproduction Steps

  1. Build libaws-cpp-sdk-transfer.so in version 1.11.485 and 1.11.486 or later
  2. Use abidiff from libabigail to compare the binaries:
$ abidiff 1.11.485/libaws-cpp-sdk-transfer.so 1.11.488/libaws-cpp-sdk-transfer.so
Functions changes summary: 0 Removed, 0 Changed, 4 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 4 Removed, 0 Added function symbols not referenced by debug info
Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info

4 Added functions:

  [A] 'method std::shared_ptr<Aws::Transfer::TransferHandle> Aws::Transfer::TransferManager::CreateUploadFileHandle(Aws::IOStream*, const Aws::String&, const Aws::String&, const Aws::String&, const Aws::Map&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&, const Aws::String&, const Aws::String&)'    {_ZN3Aws8Transfer15TransferManager22CreateUploadFileHandleEPSdRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_SA_RKSt3mapIS8_S8_St4lessIS8_ESaISt4pairIS9_S8_EEERKSt10shared_ptrIKNS_6Client18AsyncCallerContextEESA_SA_}
  [A] 'method void Aws::Transfer::TransferManager::SetChecksumForAlgorithm(const std::shared_ptr<Aws::Transfer::PartState>&, Aws::S3::Model::CompletedPart&)'    {_ZN3Aws8Transfer15TransferManager23SetChecksumForAlgorithmERKSt10shared_ptrINS0_9PartStateEERNS_2S35Model13CompletedPartE}
  [A] 'method std::shared_ptr<Aws::Transfer::TransferHandle> Aws::Transfer::TransferManager::UploadFile(const Aws::String&, const Aws::String&, const Aws::String&, const Aws::String&, const Aws::Map&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&, const Aws::String&)'    {_ZN3Aws8Transfer15TransferManager10UploadFileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_S9_S9_RKSt3mapIS7_S7_St4lessIS7_ESaISt4pairIS8_S7_EEERKSt10shared_ptrIKNS_6Client18AsyncCallerContextEES9_}
  [A] 'method std::shared_ptr<Aws::Transfer::TransferHandle> Aws::Transfer::TransferManager::UploadFile(const std::shared_ptr<std::basic_iostream<char, std::char_traits<char> > >&, const Aws::String&, const Aws::String&, const Aws::String&, const Aws::Map&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&, const Aws::String&)'    {_ZN3Aws8Transfer15TransferManager10UploadFileERKSt10shared_ptrISdERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESD_SD_RKSt3mapISB_SB_St4lessISB_ESaISt4pairISC_SB_EEERKS2_IKNS_6Client18AsyncCallerContextEESD_}

4 Removed function symbols not referenced by debug info:

  [D] _ZN3Aws8Transfer15TransferManager10UploadFileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_S9_S9_RKSt3mapIS7_S7_St4lessIS7_ESaISt4pairIS8_S7_EEERKSt10shared_ptrIKNS_6Client18AsyncCallerContextEE
  [D] _ZN3Aws8Transfer15TransferManager10UploadFileERKSt10shared_ptrISdERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESD_SD_RKSt3mapISB_SB_St4lessISB_ESaISt4pairISC_SB_EEERKS2_IKNS_6Client18AsyncCallerContextEE
  [D] _ZN3Aws8Transfer15TransferManager22CreateUploadFileHandleEPSdRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_SA_RKSt3mapIS8_S8_St4lessIS8_ESaISt4pairIS9_S8_EEERKSt10shared_ptrIKNS_6Client18AsyncCallerContextEESA_
  [D] _ZN3Aws8Transfer15TransferManager23SetChecksumForAlgorithmESt10shared_ptrINS0_9PartStateEERNS_2S35Model13CompletedPartE

Possible Solution

No response

Additional Information/Context

Related bug report for Arch Linux nix package: https://gitlab.archlinux.org/archlinux/packaging/packages/nix/-/issues/6

AWS CPP SDK version used

1.11.488

Compiler and Version used

gcc (GCC) 14.2.1 20240910

Operating System and version

Arch Linux

Metadata

Metadata

Assignees

No one assigned

    Labels

    closed-for-stalenessresponse-requestedWaiting on additional info and feedback. Will move to "closing-soon" in 10 days.wontfixWe have determined that we will not resolve the issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions