C 언어는 왜 아직도 "*"를 에러로 쓰는가
*sshole, or when are we going to get rid of C?

musl libc의 crypt 함수가 너무 긴 비밀번호에 "*"를 반환하고, Unix에서 "*"는 잠긴 계정을 뜻해 인증 우회 취약점이 발생했다. 필자는 이는 메모리 안전성 문제가 아니라 C 커뮤니티의 관행이 빚은 in-band signaling이라 지적한다. Rust라면 에러 타입으로 강제했을 것이며, LLM이 코드를 작성해도 커뮤니티 규범이 다르면 결과가 달라진다고 주장한다.
C 개발자들의 엔지니어링 규범은 "*"를 에러를 나타내는 허용 가능한 센티널 값으로 용인하지만, Rust 개발자들의 규범은 결코 그렇지 않다.
HN 토론
19- PeterWhittaker
이건 C의 문제라기보다는 musl 팀의 잘못된 설계 결정에 가깝습니다. 좋지 않은 관행(프로그래머들이 crypt가 반환한 값을 확인하지 않는 것)에 대응해서, 그들은 더 나쁘다고 할 수 있는 관행(센티널 값을 반환하는 것)을 만들어냈습니다.
물론 Rust의 std::result가 멍청한 짓을 하기 더 어렵게 만들 수는 있지만, 멍청함은 언제나 방법을 찾기 마련이죠.
- zeroCalories
난 정말 Rust 컴파일 시간이 너무 싫어
- varispeed
그게 C랑 무슨 상관이죠? 그냥 형편없는 설계일 뿐인데요.
마치 트랙수트 탓으로 운전을 못하는 걸 돌리는 것과 같네요.