mysqlsh:記錄連接數(shù)據(jù)庫(kù)的相關(guān)bug

author:sufei
說(shuō)明:本文記錄在最新版本MySQL 8.0.26中存在的一個(gè)bug


現(xiàn)象

使用mysqlsh以u(píng)ri方式創(chuàng)建連接時(shí)耗绿,若uri中的host域名如果中包含user苹支,且user以URL編碼(ASCII形式),同時(shí)password信息也在uri中時(shí)误阻,mysqlsh報(bào)錯(cuò)basic_string::_M_replace_aux

image-20210824203811923

根據(jù)官方文檔债蜜,uri格式如下晴埂,特殊字符可用形如%XX的方式替換

[scheme://][user[:password]@]<host[:port]|socket>[/schema][?option=value&option=value...]

分析

通過(guò)gdb調(diào)試可知亭珍,出錯(cuò)的原因主要是因?yàn)樵趍ysqlsh::hide_password_in_uri中調(diào)用string.replace時(shí)異常

hide_password_in_uri函數(shù)主要是安全考慮鸣剪,隱藏系統(tǒng)進(jìn)程顯示中的密碼信息塔插,如

image-20210825104025352
static std::string hide_password_in_uri(std::string uri,
                                        const std::string &username) {
  std::size_t pwd_start = uri.find(username) + username.length() + 1;
  std::size_t pwd_size = uri.find('@', pwd_start) - pwd_start;
  return uri.replace(pwd_start, pwd_size, pwd_size, '*');
}

// 調(diào)用棧
(gdb) bt
#0  mysqlsh::hide_password_in_uri (uri=..., username=...) at /data2/sf/mysql8/teledb-mysql/8.0.18/mysql-shell-8.0.19-src/mysqlshdk/shellcore/shell_options.cc:108
#1  0x0000000001691634 in mysqlsh::Shell_options::custom_cmdline_handler (this=0x2a20120, iterator=0x7fffffff9690)
    at /data2/sf/mysql8/teledb-mysql/8.0.18/mysql-shell-8.0.19-src/mysqlshdk/shellcore/shell_options.cc:714
...

gdb信息

(gdb) show args
Argument list to give program being debugged when it is started is "--uri %72%6f%6f%74:123456@root123:3306".
(gdb) p username.c_str()
$14 = 0x2a1bf90 "root"
(gdb) p pwd_start
$15 = 25
# string.find找不到對(duì)應(yīng)的字符串肤频,返回2^64-1 (25+18446744073709551590)
(gdb) p pwd_size
$16 = 18446744073709551590
# string.replace接收類(lèi)型為size_t羊壹,最大值2^63-1娘扩,導(dǎo)致異常

ps: uri用戶(hù)信息處理函數(shù)

mysqlshdk::db::uri::Uri_parser::parse_userinfo()
# 調(diào)用棧
#0  mysqlshdk::db::uri::Uri_parser::parse_userinfo (this=0x7fffffff88e0) at /data2/sf/mysql8/teledb-mysql/8.0.18/mysql-shell-8.0.19-src/mysqlshdk/libs/db/uri_parser.cc:152
#1  0x000000000154d99f in mysqlshdk::db::uri::Uri_parser::parse (this=0x7fffffff88e0, input=..., mode=mysqlshdk::utils::nullable_options::CASE_INSENSITIVE)
    at /data2/sf/mysql8/teledb-mysql/8.0.18/mysql-shell-8.0.19-src/mysqlshdk/libs/db/uri_parser.cc:845
#2  0x00000000014e28f7 in mysqlshdk::db::Connection_options::Connection_options (this=0x7fffffff8f90, uri=..., mode=mysqlshdk::utils::nullable_options::CASE_INSENSITIVE)
    at /data2/sf/mysql8/teledb-mysql/8.0.18/mysql-shell-8.0.19-src/mysqlshdk/libs/db/connection_options.cc:79
#3  0x000000000149f9e9 in shcore::get_connection_options (uri=..., set_defaults=false)
    at /data2/sf/mysql8/teledb-mysql/8.0.18/mysql-shell-8.0.19-src/mysqlshdk/libs/utils/utils_general.cc:169
#4  0x0000000001691575 in mysqlsh::Shell_options::custom_cmdline_handler (this=0x2a20120, iterator=0x7fffffff9690)
    at /data2/sf/mysql8/teledb-mysql/8.0.18/mysql-shell-8.0.19-src/mysqlshdk/shellcore/shell_options.cc:710

官方確認(rèn)

目前組內(nèi)成員已向官方提交相關(guān)bug帮掉,并予以確認(rèn)
官方已確認(rèn)(Bug #104714

image-20210825153800976
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末誊辉,一起剝皮案震驚了整個(gè)濱河市向胡,隨后出現(xiàn)的幾起案子恼蓬,更是在濱河造成了極大的恐慌,老刑警劉巖僵芹,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件处硬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡拇派,警方通過(guò)查閱死者的電腦和手機(jī)郁油,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)攀痊,“玉大人桐腌,你說(shuō)我怎么就攤上這事」毒叮” “怎么了案站?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)棘街。 經(jīng)常有香客問(wèn)我蟆盐,道長(zhǎng),這世上最難降的妖魔是什么遭殉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任石挂,我火速辦了婚禮,結(jié)果婚禮上险污,老公的妹妹穿的比我還像新娘痹愚。我一直安慰自己,他們只是感情好蛔糯,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布拯腮。 她就那樣靜靜地躺著,像睡著了一般蚁飒。 火紅的嫁衣襯著肌膚如雪动壤。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天淮逻,我揣著相機(jī)與錄音琼懊,去河邊找鬼阁簸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛哼丈,可吹牛的內(nèi)容都是我干的启妹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼削祈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了脑漫?” 一聲冷哼從身側(cè)響起髓抑,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎优幸,沒(méi)想到半個(gè)月后吨拍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡网杆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年羹饰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碳却。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡队秩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出昼浦,到底是詐尸還是另有隱情馍资,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布关噪,位于F島的核電站鸟蟹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏使兔。R本人自食惡果不足惜建钥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虐沥。 院中可真熱鬧熊经,春花似錦、人聲如沸欲险。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盯荤。三九已至馋吗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秋秤,已是汗流浹背宏粤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工脚翘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绍哎。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓来农,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親崇堰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沃于,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容