Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Correct c-struct 'null' checks, fix failing tests due to expired certs, improve openssl error handling #74

Open
wants to merge 7 commits into
base: master
Choose a base branch
from

Conversation

euank
Copy link

@euank euank commented Feb 22, 2018

This PR does a lot because, well, to make the tests not fail due to frankdd certs that expired in late 2017, a lot of stuff was required.

The main point of this PR, however, is the "Correct c-struct 'null' checks" commit.
The use of if not c_struct to check whether something was null didn't work, and so it was fairly easy to end up with memory unsafe behaviour when anything other than the completely happy path was hit in the openssl integration.

cc @SkyLothar

'-a stderr -a stdout' is unneeded since that's the default, and '-i'
already does '-a stdin' so that was redundant.

Setting the entrypoint to empty string was also really weird!
Some of the testcerts expired in 2017, so tests started failing! This
regenerates them with fairly similar certificates.

The script used to generate them is included for regeneration.

Test changes, to use these new certs, follow in the next commit.
This replaces hardcoded certificates with loading them from disk for the
tests.

This allows swapping around certs much more easily.

This also swaps out all expired certs so tests pass again.
In luajit, a null pointer is distinct from nil, and thus "truthy". That
is to say, `if not c_ffi_struct` will never evaluate to true, even if
the struct is null.

However, a null ffi struct does compare equal to nil, so the new
comparison corrects this issue.

This fixes numerous bugs in this library, including multiple cases of
uninitialized data being passed into functions leading to null pointer
dereferences, buffer overflows, and more.
Openssl maintains an error queue.
A given function may add multiple errors to that queue, and only
printing the last one is worse than printing the whole thing.

In fact, as it was implemented before, the output was not consistent;
e.g. the same error could produce different messages.
The null check issue would result in totally invalid pubkeys not bailing
out the whole thing.

This adds a test which failed prior to the null struct fix.
@ghost ghost mentioned this pull request May 23, 2018
@cdbattags
Copy link

Ope, just now seeing this! Adding this to my new fork at https://github.com/cdbattags/lua-resty-jwt.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants