From 972d053c83e2179e383d054908ee9184e00dbf05 Mon Sep 17 00:00:00 2001 From: hikerpig Date: Wed, 24 Jul 2019 23:49:07 +0800 Subject: [PATCH] fix: array access error when `token.map` is null, fix #3123 --- browser/lib/markdown.js | 4 +++- tests/fixtures/markdowns.js | 8 +++++++- tests/lib/markdown-test.js | 5 +++++ tests/lib/snapshots/markdown-test.js.md | 15 +++++++++++++++ tests/lib/snapshots/markdown-test.js.snap | Bin 2301 -> 2471 bytes 5 files changed, 30 insertions(+), 2 deletions(-) diff --git a/browser/lib/markdown.js b/browser/lib/markdown.js index 2dc98121..49183442 100644 --- a/browser/lib/markdown.js +++ b/browser/lib/markdown.js @@ -289,7 +289,9 @@ class Markdown { case 'list_item_open': case 'paragraph_open': case 'table_open': - token.attrPush(['data-line', token.map[0]]) + if (token.map) { + token.attrPush(['data-line', token.map[0]]) + } } }) const result = originalRender.call(this.md.renderer, tokens, options, env) diff --git a/tests/fixtures/markdowns.js b/tests/fixtures/markdowns.js index 0ee80909..340f2ddd 100644 --- a/tests/fixtures/markdowns.js +++ b/tests/fixtures/markdowns.js @@ -104,6 +104,11 @@ Term 2 with *inline markup* ` const shortcuts = 'Ctrl\n\n[[Ctrl]]' +const footnote = ` +^[hello-world] +hello-world: https://github.com/BoostIO/Boostnote/ +` + export default { basic, codeblock, @@ -115,5 +120,6 @@ export default { subTexts, supTexts, deflists, - shortcuts + shortcuts, + footnote } diff --git a/tests/lib/markdown-test.js b/tests/lib/markdown-test.js index 46ae5941..31ffc518 100644 --- a/tests/lib/markdown-test.js +++ b/tests/lib/markdown-test.js @@ -68,3 +68,8 @@ test('Markdown.render() should render shortcuts correctly', t => { const rendered = md.render(markdownFixtures.shortcuts) t.snapshot(rendered) }) + +test('Markdown.render() should render footnote correctly', t => { + const rendered = md.render(markdownFixtures.footnote) + t.snapshot(rendered) +}) diff --git a/tests/lib/snapshots/markdown-test.js.md b/tests/lib/snapshots/markdown-test.js.md index 56c4466f..4111c2f2 100644 --- a/tests/lib/snapshots/markdown-test.js.md +++ b/tests/lib/snapshots/markdown-test.js.md @@ -4,6 +4,21 @@ The actual snapshot is saved in `markdown-test.js.snap`. Generated by [AVA](https://ava.li). +## Markdown.render() should render footnote correctly + +> Snapshot 1 + + `

[1]
␊ + hello-world: https://github.com/BoostIO/Boostnote/

␊ +
␊ +
␊ +
    ␊ +
  1. hello-world ↩︎

    ␊ +
  2. ␊ +
␊ +
␊ + ` + ## Markdown.render() should render line breaks correctly > Snapshot 1 diff --git a/tests/lib/snapshots/markdown-test.js.snap b/tests/lib/snapshots/markdown-test.js.snap index 67d43616d4a6a971121a41c67b649aab3983da83..3f5ec41c0d4710ca98ea132da2e1ca9c30ff7799 100644 GIT binary patch literal 2471 zcmV;Y30U?)RzVr=7)FxiPRiiN_u!mDdGJb&Z0vtO$`cTYi{Jg_v7fA6_lGS-DShSMLgCbvV^L_`bN%NF|9Im=m%s4Pkd(gfzT}yJ=gWt# zpR8Uw@$@6!bEoDvJnsxi>9zEE2cFI64?n%`cYnOF{!j0mZhZbph*d~$tS=NAuRnS7 z=GTW8e>O_jJo~FRPZXte(}qIfudlv(AiZmx@w)9-jAJIrHZ5)Ppbo z`i-~j&;9NG=d<-IbyYS)p-fBdJXpSk+lM<4vu zg{e;-zgCpe!=ES=h6*2$%oX2XxOeEGH8rP#T)VE!5YM7MQ8`t2QX27qa-tv`bF6x9 zKM&^#ViLt@4+nZQ85$&@P#bCs>c&EVg*sTJnuej< zp4-!fu|8dxb-5FpGJNT2??J8YU0ZaUt~TM(*jA4$2bLSm%D8tzx8qO@Ikcd(1#QHB zxE&>J(ZCqS?BbD*jvLv7h$uln73^>G-fZlLalgg}|gS}Vp zcG7UXq)tM1@kEA!N!pnogo`->?Z|1hi*SwvZWuyaGBoXYG?@?_hO|x|*}=GL!MxkS zEXQ5QWmm`+X*){WMSA(>;Pg_-FHY#9>GG1dtm*#2eTQN|JWOnnR(A)po*OxX>FT$} zL@H&{UQ)(7$?7zTv^MsU5C-|>53fNZA!JcqL@)|tMdcUc?0`^?k!QO`<@GN-0 zF`J;i9|w>mv%A-bSgC0XjMHO38az(==-_eMF*9?fxl1t~cKKv%4(?}uE9rtbGq&^S zzT=89z36gI*kFtmrpugV;W4fld$0vNBWGXr~%nDfQ?o$T5qK}NGL*OfQ0}&5W|+vx}2%AvFJFYr;Kiw zf-noDnPTXvgC0M!3#siKfGuDq_RKkAaa2c}+LLJ0cA!Hjw`^+~5MgAnOxe~?24xd>d=Hw$3n&mD2aq2k5HPw3->zZRH2ALh)TqN7m9j9ExrX0< zi`sAV?Kjqbr%%QyG%O1?)q~zRIE)7@9BcsIME_P{%+*2`Z1;Ms5h?Krz z_)uyh5u{BTIQC$fS$);uk44)4pc0;iO^~Ht^{tuD*kEsrz?`Z7hduN`TPoe9%o?0$d#)pT8?|{Q_b!z_V)S^|X4PdTZ9T`jLn*X<8^cL%EbwTq%YRala zSuosx#z0{nn>phJs3o|{`$}0qY40K$8y&8cJ5ypj8F*=!szTAdO|6zHl`6F5nHuTR zPaTDQC!b#0I&e-!?iq0iVNe5b75

B)+T2=fbuxV`)on6S;$*J6Mmo&)~ITx`85c z@_*06Y9^5R{|WTJm_YyfCtIierqHfQ(?B?mno~gPUQYacp;mK)Fy@Fahw$HWh}AUd zk|GP?)<0EOpgu-N11TVOr`YU+k5Z-l)z1Jwsdm<1Rr;IAcpMsJNv<(!6#Bv*Hk(Y7+q59Z`!!)4V$Xu3zXV7OT^K3NZ zLQy_LOept*h(gT}`-(ABok+3!a5mZMo=7{n-bLbw)wgq#HE5Ho5`N0PsCzr8VJ~Vp z097Bai8`1&0$0?-`N4Q;sD%q@)P=JoFr+34FYBYzj6`$ljVnKvs+&bg4H3TReA z(-tYf=G`iAf}JMJ7b-Rvt#s8v1f6RgU6V6w-ouzo zFtAO5F`i{ObOb`z+|x_ly_JKMStk2>5>~Bg+QtNDUQH8kY0&xIppQ~!om?yC=7QK; zA>p(x5-3eB(HUuUU2;6o2r9|m)d)ZUMkgvKlS>V`9Fu9}5YMCPqDVK}(4E~GD#ohR z5|?3ewUi4vQX>*7^1=!7wj?>PA!Y*gdJScsNOs<&kI>mXA+Fftjaq1Q^%8XxBzfsE lGqKf_T;96;{o5~G>2x67eW_STS{ksi_MfXTBG{lC005BY)zAO{ literal 2301 zcmVqUbD-eIJVm00000000y1 zSZ|EnMit*ZkT}u`)Hade6H_B4qKVhL-o49S;V;Uyx7{{ZNU5gc?Cr_>hW5AQd50%7<1+Ab2zD{bR3v zT*9AEtmNI<_viQCym|BHjT_}s>5kHC(>q?g{;Ts}tG#eTiT}Q`9fp4}H8eD2QQ{qgbbe|q=P&gY*2Upe*q_EM?y`ZG6f ze7({8>1;6l{4d{pxGboI>!t?&C=iY2AeCm~7 zzwws!x!-?PDhuiZ9|MoxF1_@Fm;dsOr}5vOymIBYaamBGhi9tvArYVQ2TONP-8Ze- zHRM<=X^FUI;1QVx^1&d8m>)1AAqz7syN*voKl(|<^?3%t!vsD4pb{(@T z+k^@vVmVCqFzs4F&rhMLk}gCM7v+Fl6b(etpTBeED*&tlu+yO!Z1xgoe07os(9c4|+WRB2efDjoU_8XrV+)1gx)xxK^RFwd!qodw7i}1#CFI9r!S2 zeJ46J@Q@ZU8u-ilKt@v%LTVcpuVJlrTP}T?Y#0Hiu#R>>nHe(()qsYEv|_93?OOG4 z7|D(=ABKVuP}vJCA}n({a(vXMBTg^2UccR>VR&7hhw9?;3Ij zl<$Ng@cK(L^hXf|!KO$V)sX{~IVR-Y0czULTBf=}wMh6V;q&tH&EoP>%Wh7XqT#TL zyP>GwiDM^YKzxu`ysRGfmt7~ai^G+-$9O5FLSKZ8j*8WzBvOXhr$X#+hOOr9h)u9f ze}vt(dGRVgGJSf@@SU1)V4a@)QSmydv&HLl zU}@=G_mHID@38sUD4u8bC>et|*F1Ro*k>huvF9*GXfehn>9S&)xXC2_2sYtl47%uk z8pL5XGO5PlBV{dwgWGg*6tyH1HX~}o*Kvo^fM)xKZ7BI@5d?jp)PZX1!$B+QgHdG# z3JMn~(BOa%#Bik3F=O&_%qI@zDJ455z}0-ACh2NoV8V`=LZZ6@U~8E2GjoNQ47Jd% zVG`}y58>d#16@slKUA&QTQ}FU=&^9sKbAiPNAV56qLw$&V zK!YB9JG!YU@U3})-hxpeXkkKgbZ_A8TC=4I22TzP<?}W0Ijg=!BQy5TuD! zb#Lm^EVf1o7Y#|42s}ZYJsx!@*#@@NXr#Trsxmu~sH5!duh+()jF>h;P(U!yt zB3G@?H2dLN{kLG$LDcEioMuI0(w0bRFr1$;(3rKKP4_;zUa8gUz{^HzW=uXY6y_$MTG?BeQ;~CyUqUGK08EBIWES!7I`SCT z&5c;X$s8iL@N*0MG4mmQ?u!w^=;ozwedhFu#ltr*U4?6Mn9)=>(cHNj2W-Dk z?hkYH7Yg;6O;E?75ks6+(F}3380SXB416nLPaq%JD)QDbr>>U0o%`t6SMij^my6H%r4?r ztlY`XYrqq`5`LJ=u5t91_FKuJQ zMx344v+F`v)XkcdG0v%|29kA6DXxQN9#*UG-(9NFYD)&xQ`K~QrM z=28eM9zdjo`0KK9DI<|mgu`L>g_1B=Pjcv@h-WGYYC3MSNfgxLDAbyphJnAl$oQdF zv!Mxv!;|q*2Og^k?&dbqh^IR~=ZW{+JZ*rIZ?`dNw~-E2-!8v;imR)R(0LT`m-GDJ z9u#8AP|!i+D(J%C>e|1vW-T;Dfq`QRl<_jfq0JG-a!;*{&sHo_YMUIJC|Fw8u=F;g XuBPx&;&k>j$PxM{Wy)f%+8F=<3N?BD