역사 속의 소프트웨어 오류

크리스마스를 없앤 구글 – 안드로이드 버그 (4.2)

(이 포스팅은 기존 블로그(http://blog.wisedog.net)에서 옮겨온 것입니다. 두 번 보셨으면 죄송합니다.) 2012년 말, 구글이 발표한 안드로이드 젤리빈 버전(4.2)에 재미있는 버그가 발견되었다. 바로 날짜를 설정할 때 12월이 표시되지 않는 버그였다.

출처 : http://www.uswitch.com/mobiles/news/2012/11/android_4_2_december_bug_not_long_for_this_world_vows_google/
출처 : http://www.uswitch.com/mobiles/news/2012/11/android_4_2_december_bug_not_long_for_this_world_vows_google/

참고 : 12월 버그를 올린 구글 이슈 트래커 URL

다행히 한국어로 설정했을 경우 발생하진 않는 버그라 국내 유저에게는 큰 영향이 없었지만, 구글 서비스를 많이 사용하는 영어권 유저들은 실생활에 큰 불편을 겪었다. 서구권 최대의 명절인 크리스마스 시즌이 다가오는데 안드로이드에서 12월 달에 약속을 설정할 수가 없었던 것!

이를 두고 “솔로인 구글 엔지니어의 음모다”, “구글이 크리스마스를 없애려한다”, “산타를 돌려줘” 등등 말이 많았지만, 이 버그는 2012년 11월 말 발표한 4.2.1 버전에서 수정되었다.

이 버그는 개발자가 안드로이드의 NumberPicker 위젯에서 최대값/최소값을 설정하는 메소드를 잘못 쓴 것이 원인이었다. 그도 그럴만한 것이 개발자가 해당 메소드를 잘못 사용하도록 메소드의 주석이 부실했던 것이 원인이었다.

public void setDisplayedValues(String[] displayedValues) {
if (mDisplayedValues == displayedValues) {
return;
}
mDisplayedValues = displayedValues;
if (mDisplayedValues != null) {
// Allow text entry rather than strictly numeric entry.
mInputText.setRawInputType(InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
// Make sure the min, max, respect the size of the displayed
// values. This will take care of the current value as well.
if (getMinValue() >= displayedValues.length) {
setMinValue(0);
}
if (getMaxValue() >= displayedValues.length) {
setMaxValue(displayedValues.length - 1);
}
} else {
mInputText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
}

기존 소스코드에 10 ~ 17번째 라인을 추가해서 12월을 선택할 수 없는 버그가 생겼던 것이었다. 결국 4.2.0 버전에서 수정했던 최대/최소값 체크 루틴을 4.2.1에서 다시 제거하고, 주석에 설명을 덧붙이는 선에서 끝났다.

전체 Diff를 보려면 여기를 클릭
커밋 로그를 보려면 여기를 클릭

Leave a Reply

Leave a Reply

Your email address will not be published. Required fields are marked *