Skip to content

Net::Socket::address() crash on Android #2492

@fenghao119

Description

@fenghao119

Expected behavior

Actual behavior

crash

Steps to reproduce the problem

(please make this a SSCCE, if applicable and reasonable)

void test()
{
  	using Poco::Net::SocketAddress;
	using Poco::Net::ServerSocket;
	ServerSocket svs(SocketAddress("localhost", 12345));
	std::string s = svs.address().toString(); // crash in release build
}

tombstone (call from jni)

Revision: '0'
ABI: 'arm'
pid: 16294, tid: 16294, name: bridge  >>> ./bridge <<<
signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr 0xffac4f3e
    r0 f3bb2380  r1 f58c6020  r2 00000000  r3 f3b83510
    r4 ffac4f3e  r5 ffac4f3e  r6 f3e9f1b8  r7 f3bb2380
    r8 00000000  r9 00000000  sl 00000000  fp ffac4ef8
    ip f3bb238c  sp ffac4ef0  lr f5204904  pc f51913b0  cpsr 600f0010
    d0  2073736572646461  d1  ffffffffffffffff
    d2  0000000000000000  d3  0000000000000000
    d4  735a426e44783236  d5  456b6b6278797732
    d6  6c2f3d3d77614a49  d7  6c2f6d72612f6269
    d8  0000000000000000  d9  0000000000000000
    d10 0000000000000000  d11 0000000000000000
    d12 0000000000000000  d13 0000000000000000
    d14 0000000000000000  d15 0000000000000000
    d16 0000003f00000041  d17 63757274736e6f63
    d18 203a73726f746375  d19 0000018000000180
    d20 0000000800000008  d21 0000000800000008
    d22 0000000400000004  d23 0000000400000004
    d24 0000218100000181  d25 0000618100004181
    d26 0000218000000180  d27 0000618000004180
    d28 0000000000000000  d29 0000000000000000
    d30 0000000000000000  d31 0000000000000000
    scr 60000000

backtrace:
    #00 pc 012793b0  /data/app/com.xxx.app/lib/arm/libxxxxx.so (Poco::Net::Impl::IPv4SocketAddressImpl::IPv4SocketAddressImpl(sockaddr_in const*)+36)
    #01 pc 01278660  /data/app/com.xxx.app/lib/arm/libxxxxx.so (Poco::Net::SocketAddress::SocketAddress(sockaddr const*, int)+224)
    #02 pc 0127dc18  /data/app/com.xxx.app/lib/arm/libxxxxx.so (Poco::Net::SocketImpl::address()+148)

Disassembler

; void __fastcall Poco::Net::Impl::IPv4SocketAddressImpl::IPv4SocketAddressImpl(Poco::Net::Impl::IPv4SocketAddressImpl *this, const sockaddr_in *addr)
_ZN4Poco3Net4Impl21IPv4SocketAddressImplC2EPK11sockaddr_in
                                        ; CODE XREF: Poco::Net::SocketAddress::SocketAddress(Poco::Net::SocketAddress const&)+78�p
                                        ; Poco::Net::SocketAddress::SocketAddress(sockaddr const*,int)+E0�p ...
this = R0                               ; Poco::Net::Impl::IPv4SocketAddressImpl *
addr = R1                               ; const sockaddr_in *
                STMFD           SP!, {R4,R10,R11,LR}
                ADD             R11, SP, #8
                MOV             R4, addr
addr = R4                               ; const sockaddr_in *
                BL              _ZN4Poco16RefCountedObjectC2Ev ; Poco::RefCountedObject::RefCountedObject(void)
                LDR             R1, =(_ZTVN4Poco3Net4Impl21IPv4SocketAddressImplE_ptr - 0xCE83EC)
                ADD             R12, this, #0xC
                LDR             R1, [PC,R1] ; _ZTVN4Poco3Net4Impl21IPv4SocketAddressImplE_ptr ; `vtable for'Poco::Net::Impl::IPv4SocketAddressImpl
                ADD             R1, R1, #8
                STR             R1, [this]
; SocketAddressImpl.cpp line 90
; std::memcpy(&_addr, addr, sizeof(_addr));
                LDMIA           addr, {R1-addr} ; =========crash here=============
                STMIA           R12, {R1-R4}
                LDMFD           SP!, {R4,R10,R11,PC}
; End of function Poco::Net::Impl::IPv4SocketAddressImpl::IPv4SocketAddressImpl(sockaddr_in const*)

POCO version

1.9.0

Compiler and version

NDK 18.0.5002713
CMAKE 3.6.4111459
"%CMAKE_PATH%\cmake.exe" -G "Android Gradle - Ninja" -DANDROID_ABI=armeabi-v7a -DCMAKE_BUILD_TYPE=Release -DANDROID_PLATFORM=android-16 ^
-DANDROID_STL="c++_static" -DANDROID_CPP_FEATURES="exceptions rtti" -DENABLE_TESTS=OFF -DENABLE_JSON=OFF -DENABLE_MONGODB=OFF -DENABLE_REDIS=OFF ^
-DENABLE_DATA_MYSQL=OFF -DENABLE_DATA_ODBC=OFF -DENABLE_PAGECOMPILER=OFF -DENABLE_PAGECOMPILER_FILE2PAGE=OFF -DPOCO_STATIC=ON -DCMAKE_MAKE_PROGRAM="%CMAKE_PATH%\ninja.exe" ^
-DCMAKE_TOOLCHAIN_FILE="%ANDROID_NDK_ROOT%\build\cmake\android.toolchain.cmake"

Operating system and version

Other relevant information

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions