2.2 KB

How to review a patch

Some folks have said that they'd like to review patches more often, but they don't know how.

So, here are a bunch of things to check for when reviewing a patch!

Note that if you can't do every one of these, that doesn't mean you can't do a good review! Just make it clear what you checked for and what you didn't.

Top-level smell-checks

(Difficulty: easy)

  • Does it compile with --enable-fatal-warnings?

  • Does make check-spaces pass?

  • Does make check-changes pass?

  • Does it have a reasonable amount of tests? Do they pass? Do they leak memory?

  • Do all the new functions, global variables, types, and structure members have documentation?

  • Do all the functions, global variables, types, and structure members with modified behavior have modified documentation?

  • Do all the new torrc options have documentation?

  • If this changes Tor's behavior on the wire, is there a design proposal?

  • If this changes anything in the code, is there a "changes" file?

Let's look at the code!

  • Does the code conform to CodingStandards.txt?

  • Does the code leak memory?

  • If two or more pointers ever point to the same object, is it clear which pointer "owns" the object?

  • Are all allocated resources freed?

  • Are all pointers that should be const, const?

  • Are #defines used for 'magic' numbers?

  • Can you understand what the code is trying to do?

  • Can you convince yourself that the code really does that?

  • Is there duplicated code that could be turned into a function?

Let's look at the documentation!

  • Does the documentation confirm to CodingStandards.txt?

  • Does it make sense?

  • Can you predict what the function will do from its documentation?

Let's think about security!

  • If there are any arrays, buffers, are you 100% sure that they cannot overflow?

  • If there is any integer math, can it overflow or underflow?

  • If there are any allocations, are you sure there are corresponding deallocations?

  • Is there a safer pattern that could be used in any case?

  • Have they used one of the Forbidden Functions?

(Also see your favorite secure C programming guides.)