aliyun / aliyun-log-ios-sdk

Aliyun LOG iOS SDK
MIT License
84 stars 37 forks source link

-[LogProducerClient convertToChar:] 会crash #46

Closed zhahao closed 8 months ago

zhahao commented 1 year ago

版本:3.1.16 测试代码: `

/// 从LogProducerClient源码复制出来的 -(char)convertToChar:(NSString)strtemp { NSUInteger len = [strtemp lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; if (len > 1000000) return strdup([strtemp UTF8String]); char cStr [len]; [strtemp getCString:cStr maxLength:len encoding:NSUTF8StringEncoding]; return strdup(cStr); }

` crash信息:Thread 1: EXC_BAD_ACCESS (code=1, address=0x16f5b0bf0)

当栈被占用很多的时候, [strtemp getCString:cStr maxLength:len encoding:NSUTF8StringEncoding]; 这行代码会造成坏内存访问,可能是StackOverflow了

phasedarray commented 11 months ago

这里最终还是通过 strdup 创建了堆内存,还去用区分是否len > 1000000真的是迷之操作。

Z-JaDe commented 8 months ago

貌似 至今没解决这个问题 4.3.0了

Z-JaDe commented 8 months ago

和线程有关系,在主线程执行一般不会Crash,因为主线程的栈空间比较大。在子线程超过512K会直接野指针。

cnbleu commented 8 months ago

和线程有关系,在主线程执行一般不会Crash,因为主线程的栈空间比较大。在子线程超过512K会直接野指针。

经过本地环境复现,目前已经可以稳定复现该问题。下个版本会提供修复方案。

cnbleu commented 8 months ago

和线程有关系,在主线程执行一般不会Crash,因为主线程的栈空间比较大。在子线程超过512K会直接野指针。

经过本地环境复现,目前已经可以稳定复现该问题。下个版本会提供修复方案。

已经修复,需要升级到4.3.3版本:https://github.com/aliyun/aliyun-log-ios-sdk/releases/tag/4.3.3