Comment by bawolff

2 days ago

Its kind of cool to see such simple to follow logic bugs instead of usual memory safety issues. Each step made sense in isolation.

The terrifying decision for the API to return "*" on failure is a second-order consequence of memory unsafety, because it was a half-baked attempt to mitigate a common source of UB that people were encountering in the wild.

  • i'd say it is more a consequence of not having exceptions or other way of being explicit about error values.

    • That was a contributing factor, but there are plenty of other instances of C APIs that make use of in-band signaling like this. That the API was changed from returning one in-band signal to another is because the original value was causing programs to crash unpredictably due to UB.