Contribution to dart-lang/markdown package
dart-lang/markdown패키지에 기여를 했다.
기여 내용은 Commonmark의 Spec에서 Link의 url에 URL-Escaping이 포함되어 있으면 그건 건들지 말고 XSS공격에 대응해야 하는데, 그렇게 되있지 않아 url encoding과정을 건들였다.
처음엔 markdown
패키지를 업데이트 한 후 내 잘나오던 이미지들이 왜 안나오지 하고 찾아보다가 알게되었다.
- Issue: When Image src encoded, it changes the valid url to mismatched one #597
- PR: Link uri encoding, URL-escaping should be left alone inside the destination #598
또 작업한지 몇시간만에 merge가 되었다.
배운 것
- Commonmark, GFM같은 Markdown Spec을 갖추기 위해 직접 그 사이트들에서 테스트 Input Output들을 받아와 실제 결과물이 일치하는지 확인하는 과정의 테스트가 재미있었다. 이 Repository에
test/**/*.unit
파일들이 그 테스트 spec들이다. - URL Encoding이 생각보다 복잡한 과정으로 이루어진다는 것을 알았다. 내 코드에선 그냥
%[0-9A-Fa-f]{2}
regex를 썼을 뿐이지만, 실제 Dart 코드를 들여다보면Uri.encodeFull
인지,Uri.encodeComponent
,Uri.encodeQueryXXX
인지에 따라 각각%XX
포맷에서 비트셋을 정의해두고 해당 함수가 파싱해야 하는 URL-Escaping들만 파싱함을 알 수 있다.
Comments