C 언어는 왜 아직도 "*"를 에러로 쓰는가

*sshole, or when are we going to get rid of C?

C 언어는 왜 아직도 "*"를 에러로 쓰는가

musl libc의 crypt 함수가 너무 긴 비밀번호에 "*"를 반환하고, Unix에서 "*"는 잠긴 계정을 뜻해 인증 우회 취약점이 발생했다. 필자는 이는 메모리 안전성 문제가 아니라 C 커뮤니티의 관행이 빚은 in-band signaling이라 지적한다. Rust라면 에러 타입으로 강제했을 것이며, LLM이 코드를 작성해도 커뮤니티 규범이 다르면 결과가 달라진다고 주장한다.

C 개발자들의 엔지니어링 규범은 "*"를 에러를 나타내는 허용 가능한 센티널 값으로 용인하지만, Rust 개발자들의 규범은 결코 그렇지 않다.
  1. PeterWhittaker

    이건 C의 문제라기보다는 musl 팀의 잘못된 설계 결정에 가깝습니다. 좋지 않은 관행(프로그래머들이 crypt가 반환한 값을 확인하지 않는 것)에 대응해서, 그들은 더 나쁘다고 할 수 있는 관행(센티널 값을 반환하는 것)을 만들어냈습니다.

    물론 Rust의 std::result가 멍청한 짓을 하기 더 어렵게 만들 수는 있지만, 멍청함은 언제나 방법을 찾기 마련이죠.

  2. zeroCalories

    난 정말 Rust 컴파일 시간이 너무 싫어

  3. varispeed

    그게 C랑 무슨 상관이죠? 그냥 형편없는 설계일 뿐인데요.

    마치 트랙수트 탓으로 운전을 못하는 걸 돌리는 것과 같네요.

이 날의 다른 글

2026-11-06