<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          快一個(gè)月,Go1.16 才發(fā)現(xiàn)了比較嚴(yán)重的 Bug,但這個(gè) Bug 有點(diǎn) Low。。。

          共 1823字,需瀏覽 4分鐘

           ·

          2021-03-13 22:37

          閱讀本文大概需要 4 分鐘。

          大家好,我是站長 polarisxu。

          Go 1.16 是 2021 年 2 月 16 日發(fā)布的。新版本發(fā)布,大家一般會等等,坐等 1.16.1 發(fā)布。沒想到快一個(gè)月了才等到。

          和之前一樣,小版本是修復(fù) Bug,會同時(shí)發(fā)布兩個(gè)版本,這次是 Go1.16.1 和 Go1.15.9。那具體什么 Bug 呢?

          Bug 1:encoding/xml 包相關(guān)

          這個(gè) Bug 不是 1.16 引入的,而是之前版本就存在。所以,Go 1.15.9 也修復(fù)了該 Bug。

          具體是:在通過 xml.NewTokenDecoder 獲得一個(gè) Decoder 指針時(shí),如果參數(shù) TokenReader 是自定義的,可能會出現(xiàn)死循環(huán)。

          The Decode, DecodeElement, and Skip methods of an xml.Decoder provided by xml.NewTokenDecoder may enter an infinite loop when operating on a custom xml.TokenReader which returns an EOF in the middle of an open XML element.

          詳情見 issue:https://github.com/golang/go/issues/44915。

          Bug 2:archive/zip 包相關(guān)

          當(dāng)調(diào)用該包中的 Render.Open 方法時(shí),如果 zip 包含以 ../ 開頭的文件,該方法會 panic。這個(gè)方法是 Go1.16 新增的,因?yàn)榉祷亓?io/fs.File 類型。

          func (r *Reader) Open(name string) (fs.File, error)

          當(dāng)跟蹤修復(fù)該 Bug 的代碼時(shí),有點(diǎn)掉價(jià)。。。(見:https://github.com/golang/go/commit/634d28d78ccbeb6e86f8bfeba030ea8be518f8fa)

          完整的修復(fù)前的代碼:

          func toValidName(name string) string {
           name = strings.ReplaceAll(name, `\``/`)
           p := path.Clean(name)
           if strings.HasPrefix(p, "/") {
            p = p[len("/"):]
           }
           for strings.HasPrefix(name, "../") {
            p = p[len("../"):]
           }
           return p
          }

          通過 for 循環(huán)處理 p 中的 ../,結(jié)果 for 里面用的卻是 name 變量,這個(gè) bug 有點(diǎn) low。。。可見大神們也有犯低級錯(cuò)誤的時(shí)候。所以,如果你團(tuán)隊(duì)成員偶爾犯了低級錯(cuò)誤,別太責(zé)備,讓他抄寫對應(yīng) Bug 100 遍即可,哈哈哈哈!

          以上兩個(gè) Bug 都定義為安全問題。Go Team 正在為 Go 版本中的漏洞提出一個(gè)新的安全策略。有興趣的可以參與討論:https://github.com/golang/go/issues/44918。


          如果你使用了 Go1.16,而且可能用了 zip 包,建議大家升級到 Go1.16.1 版本。而 xml,可能很多人都沒用到?!Go 語言中文網(wǎng)已經(jīng)為你準(zhǔn)備好了下載地址:https://studygolang.com/dl,當(dāng)然也可以使用喜歡的方式升級。




          往期推薦


          歡迎關(guān)注我

          瀏覽 78
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  美女裸体91| 欧美一区二区电影在线观看 | 亚洲黄页视频 | 97综合| 国产在线激情视频 |