OpenSSL is written by monkeys (2009)
I've done quite a bit of programming with the OpenSSL library and this article is only scratching the surface of the awfulness.  Documentation is horrible to non-existent, you really do need to go spelunking into the source to figure out how things work, and the code really is that horrible.The worst thing is that error reporting is not consistent - sometimes -1 means error, other times 0 means error, other times 0 means success, and sometimes it's a combination.  This is really, really bad for a crypto library since properly detecting errors is usually critical to security.