제대로 된 첫번째 오픈소스 contribute

사실 해당 crash는 무려 2년전 부터 존재했다. 아니 2년전에야 내가 발견했다.

Crash의 원인은 이렇다. UDL(User Defined Language)가 생성되면, 배열에 담기게 된다. 해당 배열의 크기는 30으로 고정되어 있다. 이때 생성될 때마다 다음 UDL이 들어갈 배열의 index 변수인 NBUserLang에 1을 더해준다.

이때 문제는 NBUserLang이 index의 역할을 하고 있기 때문에 UDL배열의 크기인 30보다 작아야만 한다. 하지만 1을 더할 때 해당 부분에 대한 체크가 없었다.

따라서 UDL을 30개 이상 생성하게 되면 NBUserLang은 30이되고, UDL배열의 30번째 인덱스를 접근하게 되면서 crash가 발생한다.

해당 현상을 발견하고, HackerOne에 제보했으나 약 2년간 답장이 오지 않았다. 기억에서 잊혀질 즈음 오픈소스 contribute에 대한 글을 우연히 보게되었고, 내가 찾았던 부분을 직접 고쳐서 올려보자라는 생각이 들었다.

사실 버그를 찾는 것과 그것을 제대로 고치는 것은 결이 약간 다르다. 오픈소스라고 해도 결국 버그의 원인을 찾기 위해서는 디버거를 통해 어셈블리, memory영역을 들여다봐야한다. 분석을 통해 low level 단에서 근본적인 원인으로 판단한다. 하지만 그것을 수정하는 것은, 프레임 워크 단으로 올라와서 생각해야 하기 때문에 조금 차이가 있다.   

본론으로 돌아와서 나는 예전에 HackerOne에 제보했던 글을 토대로 원인 분석을 다시 하고 c++ 함수의 reference들을 참고 하면서 단 4줄로 아주 간단하게 문제를 고칠 수 있었다. 

2줄로 수정이 가능하지만, 위의 코딩스타일을 참고해서 동일하게 맞춰주었다.

Pull Request를 보내고 6시간 정도가 지나자 maintainer가 crash 재현이 안된다고 방법을 알려달라는 멘션이 달렸다. 사진과 함께 방법을 알려줬고 1시간 뒤, "bug"와 "accepted" 태그가 달리면서 commit이 승인 됐다.

2년의 기다림이 무색하게도 pull request에 대한 반응이 너무도 빨랐다 ㅡ.ㅡ HackerOne에서의 버그바운티는 사실 끝난지 꽤 오래되긴 했다. (공식 커뮤니티에 버그바운티 기간이 끝나서 리워드는 없지만 버그는 제보받는다고 적혀있었다.)


이렇게 나도 오픈소스 contribution을 해볼 수 있었다. 물론 이전에 vue 한글 문서 typo 수정해본 경험이 있지만, 실제 코드를 수정한 적은 없었다. 해보니 꽤 재미가 있었다. 저 버그를 찾을 당시에는 시스템 해킹을 열심히 하던 때였는데, 이제는 안드로이드 개발을 위주로 하다보니 안드로이드 관련 오픈소스를 contribution해보는게 목표다.

오픈소스에 기여를 한다고 돈이 되거나 그런 것은 아니지만, 큰 프로젝트들의 코드를 보면서 구조도 익힐 수 있고 요즘은 오픈소스 기여 경험을 보는 회사들도 몇몇 있는 것 같다. 

 

복사했습니다!