<b>bug背景</b>
在上個月釋出的新版本中,官方修複了一個mysqldump輸入庫名或表明長度越界的bug。
在mysql的目前限制中,庫名和表名字元串最大長度為name_len=192位元組。在myqldump實作中,需要對輸入的表名做處理,比如增加``防止表名中的特殊字元。這些臨時處理的記憶體,聲明為類似name_buff[name_len+3],這樣在使用者輸入的庫名或表名長度過長時,會造成數組越界讀寫,導緻不可預期的錯誤。
這個修複的邏輯也比較簡單,就是在開始dump前作參數檢查,若發現長度超過name_len的庫/表名,直接抛錯傳回“argument too long”。
<b>細節說明</b>
需要注意的是,該修複改變了mysqldump的行為。由于名字長度超過name_len的庫/表肯定不存在,是以修複之前的邏輯,是報告該表不存在。“table not exists”這個邏輯是可以通過--force 跳過的。而“argument too long”則無視force參數,直接抛錯傳回。