mars icon indicating copy to clipboard operation
mars copied to clipboard

LOG_INFO 宏在特定字符串崩溃

Open tangbl93 opened this issue 7 years ago • 6 comments

问题已经找到。在 LogInternal 宏中的拼接 aMessage 可能由于异常字符串导致崩溃。

机型: 5C, 系统版本: 9.3.1 重现步骤: 将提供的JSON字符串通过LOG_INFO保存就会崩溃.(需要在导出IPA后安装才会,直接编译运行不行)。

{"code":0,"data":{"productName":"\u677e\u679c\u503e\u8bc9\u5145\u503c","productDescription":"\u677e\u679c\u503e\u8bc9\u5145\u503c","orderid":"2521283","tradeNO":"201901049749524911293008228","serviceDuration":0,"prepay_id":"","nonce_str":"","timestamp":"","sign":"","money":"666","thirdPayMoney":"666","orderData":{"textNumber":"","orderType":"3"},"userCreate":"1543401880","paypalToken":"","paypalAmount":"0","alipayStr":"app_id=2018101961746127&version=1.0&format=json&sign_type=RSA2&method=alipay.trade.app.pay&timestamp=2019-01-04+11%3A29%3A30&notify_url=https%3A%2F%2Fprf.51songguo.com%2Fapp%2FOrderReturn%2FOrderFinishV2&charset=UTF-8&biz_content=%7B%22subject%22%3A%22%5Cu677e%5Cu679c%5Cu503e%5Cu8bc9%5Cu5145%5Cu503c%22%2C%22out_trade_no%22%3A%22201901049749524911293008228%22%2C%22total_amount%22%3A%22666%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%7D&sign=RkLuvceuGa3LLFQ%2FcIW3GYFz4jta5qo%2FNJPBaN1E%2Bw3fGMsaPXdUGOvKhiAY%2BLZDQ13IccURhmi9YRGp%2F8qAKecuSphcmfccGAhAHWGFcjtgTBkXN37Tmglv5hEblav5urgt6PgHi%2FF8yU%2BUatI3AlJjks4Wr52Da2XWSpepXsyEne4h1JuXgDQvyEhfEL9EVmVL59QpM2PYfGwmFi1GhrmxUkiks43k0t6oNW82jhZBfTXYcrtSIpUQ9716oU9V4FbiWPZqSWUtDgt4o0o7VbkZNjF0qvWLjW1Mnb6R60RYSB5Bb5i9nwnlbsY00Uy52LYmloMy3PVA%2FxAFs6kx6g%3D%3D"},"msg":"\u521b\u5efa\u6210\u529f","count":0,"sign":"2ef9ce3f9f6f56dc82f0d5c6fe7b3e13"}

tangbl93 avatar Jan 04 '19 04:01 tangbl93

补充一张Bugly崩溃堆栈截图,在崩溃中看不到什么有用的信息。

image

tangbl93 avatar Jan 04 '19 04:01 tangbl93

只在 系统版本: 9.3.1 上出现吗? 我手上没这个系统版本。

garryyan avatar Jan 04 '19 06:01 garryyan

我只在这台设备上重现过。没有尝试过其他低版本设备(公司没iOS 8的机器,所以也测不了,但是iOS 10的没问题)

猜测原因可能是 LogInternal 宏中用到了 ##__VA_ARGS__ 去匹配可变参数,但是遇到字符串中有 % 这种符号,就造成了占位符、参数个数不匹配导致的。(测试过移除其中带%的那个参数后打印正常)

修复这个问题花了我两天时间,如果官方团队有空的话可以改进一下Demo.

tangbl93 avatar Jan 11 '19 03:01 tangbl93

我这边没办法重现。你那边是否可以多测两个场景。

  1. 自己写个类似的宏格式化,看是否会 crash
  2. 直接用 %@ 去格式化这段字符串,是否会 crash

garryyan avatar Jan 11 '19 03:01 garryyan

好,不过得等下周了。得先赶赶需求。

不过第二点的话,我就是改成这样子修复好的。

image

tangbl93 avatar Jan 11 '19 03:01 tangbl93

+1,也是在release下会崩溃

shingohu avatar Jan 04 '22 09:01 shingohu