New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

プロファイルログに invalid byte sequence が含まれることがある #1124

Closed
ichizok opened this Issue Nov 27, 2017 · 4 comments

Comments

Projects
None yet
1 participant
@ichizok
Member

ichizok commented Nov 27, 2017

再現手順

prof.vim

func! Foo()
  return [
  \ "一丁丂七丄丅丆万丈三上下丌不与丏丐丑丒专且丕世丗丘丙业丛东丝丞丟丠両丢丣两严並丧丨丩个丫丬中丮丯丰丱串丳临丵丶丷丸丹为主丼丽举丿乀乁乂乃乄久乆乇么义乊之乌乍乎乏乐乑乒乓乔乕乖乗乘乙乚乛乜九乞也习乡乢乣乤乥书乧乨乩乪乫乬乭乮乯买乱乲乳乴乵乶乷乸乹乺乻乼乽乾乿亀亁亂亃亄亅了亇予争亊事二亍于亏亐云互亓五井亖亗亘亙亚些亜亝亞亟亠亡亢亣交亥>亦产亨亩亪享京亭亮亯亰亱亲亳亴亵亶亷亸亹人亻亼亽亾亿什仁仂仃仄仅仆仇仈仉今介仌仍从仏仐仑仒仓仔仕他仗付仙仚仛仜仝仞仟仠仡仢代令以仦仧仨仩仪仫们仭仮仯仰仱仲仳仴仵件价仸仹>仺任仼份仾仿伀企伂伃伄伅伆伇伈伉伊伋伌伍伎伏伐休伒伓伔伕伖众优伙会伛伜伝伞伟传伡伢伣伤伥伦伧伨伩伪伫伬伭伮伯估伱伲伳伴伵伶伷伸伹伺伻似伽伾伿佀佁佂佃佄佅但佇佈佉佊佋佌位>低住佐佑佒体佔",
  \ "伀企伂伃伄伅伆伇伈伉伊伋伌伍伎伏伐休伒伓伔伕伖众优伙会伛伜伝伞伟传伡伢伣伤伥伦伧伨伩伪伫伬伭伮伯估伱伲伳伴伵伶伷伸伹伺伻似伽伾伿佀佁佂佃佄佅但佇佈佉佊佋佌位低住佐佑佒体佔何佖佗佘余佚佛作佝佞佟你佡佢佣佤佥佦佧佨佩佪佫佬佭佮佯佰佱佲佳佴併佶佷佸佹佺佻佼佽佾使侀侁侂侃侄侅來侇侈侉侊例侌侍侎侏侐侑侒侓侔侕侖侗侘侙侚供侜依侞侟侠価侢侣侤侥>侦侧侨侩侪侫侬侭侮侯侰侱侲侳侴侵侶侷侸侹侺侻侼侽侾便俀俁係促俄俅俆俇俈俉俊俋俌俍俎俏俐俑俒俓俔俕俖俗俘俙俚俛俜保俞俟俠信俢俣俤俥俦俧俨俩俪俫俬俭修俯俰俱俲俳俴俵俶俷俸俹>俺俻俼俽俾俿倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾倿偀偁偂偃偄偅偆假偈偉偊偋偌偍>偎偏偐偑偒偓偔",
  \ ]
endfunc
call Foo()

vim --clean --cmd 'set enc=utf-8'

:profile start prof.log
:profile file prof.vim
:so prof.vim
:qall!

prof.log は invalid byte sequence (UTF-8) を含んでいる。

原因

https://github.com/vim/vim/blob/17471e8/src/ex_cmds2.c#L1835
script_dump_profile()

プロファイル対象コードは1行1024バイトまでしかログに出力されないため、

(a) マルチバイトが文字境界を無視して切り詰められ、invaliad byte sequence になることがある
(b) 1024バイト以上ある行は次の行と繋がってしまう(改行されない)

特に (a) はプロファイルログを利用するプログラム (e.g. covimerge) にとって都合が悪い。

解決策としては、

(1) 行を切り詰めず、全て出力する
(2) 文字境界をチェックして切り詰める

(2) の方針で修正した。
https://github.com/vim/vim/compare/master...ichizok:fix/profile-trunc-mbyte.diff

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Nov 27, 2017

Member

enc と対象ファイルの fenc が異なる場合は mb_ptr2len ではダメですかね?

Member

ichizok commented Nov 27, 2017

enc と対象ファイルの fenc が異なる場合は mb_ptr2len ではダメですかね?

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Nov 28, 2017

Member

vim/vim#2385
投げました。

Member

ichizok commented Nov 28, 2017

vim/vim#2385
投げました。

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Dec 1, 2017

Member

vim/vim@2f05849

Patch for profile log truncating halfway a character. (ichizok, 2017 Nov 28,
#2385)

Member

ichizok commented Dec 1, 2017

vim/vim@2f05849

Patch for profile log truncating halfway a character. (ichizok, 2017 Nov 28,
#2385)

@ichizok ichizok closed this Dec 1, 2017

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok
Member

ichizok commented Dec 11, 2017

8.0.1372
vim/vim@ac112f0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment