Please feel free to contribute patches; here are the basic guidelines to hack along with us!

Please work from a git tree by cloning the repo:

git clone https://github.com/ioerror/tlsdate.git

Please file bugs on the tlsdate issue tracker:

https://github.com/ioerror/tlsdate/issues

Please use the github pull request feature when possible.

The current build status is available as a handy image:

Build Status

Continuous integration is available for a number of platforms:

https://jenkins.torproject.org/job/tlsdate-ci-linux/ https://travis-ci.org/ioerror/tlsdate http://build.chromium.org/p/chromiumos/waterfall

White Space:

Spaces only, no tabs; all tabs must die No stray spaces at the end of lines Generally try not to add excessive empty white space

Documentation:

Document all functions with doxygen style comments

Ensuring Correctness:

Test your patches and ensure:

No compiler warnings or errors
No linker warnings or errors

Test your improved copy of tlsdate extensively

Security:

tlsdate is security sensitive - please consider where you add code and in what context it will run. When possible, run with the least privilege as is possible.

Proactively find bugs:

Run your copy of tlsdate under valgrind

Weird but meaningful conventions are prefered in tlsdate. We prefer attention to detail:

if ( NULL == foo (void) ) { bar (void); }

Over quick, hard to read and potentilly incorrect:

if (foo(void)==NULL)) bar();

Define magic numbers and explain their origin:

// As taken from RFC 3.14 #define MAGIC_NUMBER 23 // This goes in foo.h ptr = malloc (MAGIC_NUMBER);

Rather than just throwing them about in code:

ptr = malloc (23);

It is almost always prefered to use dynamically allocated memory:

widget_ptr = malloc (WIDGET_SIZE);

Try to avoid static allocations like the following:

char widget[WIDGET_SIZE];

Try to use unsigned values unless an API requires signed values:

uint32_t server_time_s;

Please provide relevant CHANGELOG entries for all changes. Please remove items from the TODO file as they are completed. Please provide unittest cases.

When submitting patches via email, please use git format-patch to format patches:

git format-patch 9a61fcba9bebc3fa2d91c9f79306bf316c59cbcc

Email patches with a GnuPG signature whenever possible.

When applying patches, please use git am to apply patches:

git am -i 0001-add-TODO-item.patch

If git format-patch is not possible, please send a unified diff.

When in doubt, please consult the Tor HACKING guide:

https://gitweb.torproject.org/tor.git/blob/HEAD:/doc/HACKING