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](https://secure.travis-ci.org/ioerror/tlsdate.png?branch=master)](http://travis-ci.org/ioerror/tlsdate)
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