webim / webim-client-sdk-ios

Webim Mobile SDK for iOS (Swift)
MIT License
5 stars 25 forks source link

Отсутствие защиты при доступе из разных потоков #17

Closed letko-dmitry closed 3 years ago

letko-dmitry commented 3 years ago

https://github.com/webim/webim-client-sdk-ios/blob/8be3ea0956b856d8d3f63a7f375c6f21164fbf2f/WebimClientLibrary/Backend/MessageComposingHandler.swift#L67

Мы меняем значения переменных в вызывающем потоке без какой-то защиты и после в скедулим чтение и так же изменение этих переменных уже в другом потоке. Это может привести к ситуации, когда в переменных будет некорректное значение.

Стактрейс краша, который потенциально относится к ситуации:

Crashed: com.apple.root.user-interactive-qos
0  libobjc.A.dylib                0x1b0af31e0 objc_msgSend + 32
1  libswiftCore.dylib             0x19fd96464 _foreignNormalize(readIndex:endIndex:guts:outputBuffer:icuInputBuffer:icuOutputBuffer:) + 236
2  libswiftCore.dylib             0x19fd9f1cc _StringGutsSlice._slowCompare(with:expecting:) + 3464
3  libswiftCore.dylib             0x19fd9d15c _stringCompareInternal(_:_:expecting:) + 308
4  WebimClientLibrary             0x106764764 closure #1 in MessageComposingHandler.setComposing(draft:) + 75 (MessageComposingHandler.swift:75)
5  WebimClientLibrary             0x10679fde4 thunk for @escaping @callee_guaranteed () -> () + 4371725796 (<compiler-generated>:4371725796)
6  libdispatch.dylib              0x19bc3f81c _dispatch_client_callout + 20
7  libdispatch.dylib              0x19bc42cf4 _dispatch_continuation_pop + 448
8  libdispatch.dylib              0x19bc554b8 _dispatch_source_invoke + 1284
9  libdispatch.dylib              0x19bc50fe0 _dispatch_root_queue_drain + 388
10 libdispatch.dylib              0x19bc517d8 _dispatch_worker_thread2 + 112
11 libsystem_pthread.dylib        0x1e7cce768 _pthread_wqthread + 216
12 libsystem_pthread.dylib        0x1e7cd574c start_wqthread + 8