根據 OpenCV 中國團隊的最新消息,這一 Bug 出現在了微信的掃碼引擎中(注:微信團隊于 2021 年在 OpenCV 開(kāi)源了其掃碼引擎)。
根據 GitHub 用戶(hù) Konano 和 GZTimeWalker 發(fā)現的內存讀寫(xiě) Bug,惡意制作的圖片會(huì )通過(guò)無(wú)效的內存訪(fǎng)問(wèn)導致 wechat_qrcode 模塊崩潰。
問(wèn)題發(fā)生在 DecodedBitStreamParser::decodeByteSegment 中。如下面的代碼所示,如果傳入參數 bits_是內容為空但長(cháng)度非零的 ByteSegment,此時(shí) bits.available () 返回 0,隨后 count 被更新為 0,但 nBytes 沒(méi)有更新仍保持為非 0。這會(huì )造成后面的 append 函數訪(fǎng)問(wèn)空指針 readBytes 讀取 nBytes 數據,導致程序終止。
目前這一 Bug 已被用戶(hù)提交代碼修復,開(kāi)源的速度還是很快的。不過(guò)測試,微信方面還沒(méi)有跟進(jìn)修復,目前掃碼仍會(huì )崩潰,或許要等到下個(gè)版本了。