Justin Frankel wrote: > Fine by me... (ok if I were to nitpick I would probably make most of > the internal static functions check that opts was non-NULL before > dereferencing, in case the calling code ever changed Not a bad idea. I'll squash in something like this. A real BUG_ON macro would make this less ugly. -- 8< -- Subject: ll-merge: BUG_ON(!opts) in internal functions If one of the functions used to implement ll_merge() gets exposed, callers would be likely to pass a NULL options argument, resulting in segfaults. Die with a more meaningful message in that case. Suggested-by: Justin Frankel <justin@xxxxxxxxxx> Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> --- ll-merge.c | 18 ++++++++++++++++-- 1 files changed, 16 insertions(+), 2 deletions(-) diff --git a/ll-merge.c b/ll-merge.c index 98f353a..8ff0b27 100644 --- a/ll-merge.c +++ b/ll-merge.c @@ -42,12 +42,17 @@ static int ll_binary_merge(const struct ll_merge_driver *drv_unused, const struct ll_merge_options *opts, int marker_size) { + mmfile_t *stolen; + + if (!opts) + die("BUG: !opts in binary merge driver"); + /* * The tentative merge result is "ours" for the final round, * or common ancestor for an internal merge. Still return * "conflicted merge" status. */ - mmfile_t *stolen = opts->virtual_ancestor ? orig : src1; + stolen = opts->virtual_ancestor ? orig : src1; result->ptr = stolen->ptr; result->size = stolen->size; @@ -66,6 +71,9 @@ static int ll_xdl_merge(const struct ll_merge_driver *drv_unused, { xmparam_t xmp; + if (!opts) + die("BUG: !opts in xdiff merge driver"); + if (buffer_is_binary(orig->ptr, orig->size) || buffer_is_binary(src1->ptr, src1->size) || buffer_is_binary(src2->ptr, src2->size)) { @@ -102,7 +110,10 @@ static int ll_union_merge(const struct ll_merge_driver *drv_unused, int marker_size) { /* Use union favor */ - struct ll_merge_options o = *opts; + struct ll_merge_options o; + if (!opts) + die("BUG: !opts in union merge driver"); + o = *opts; o.variant = XDL_MERGE_FAVOR_UNION; return ll_xdl_merge(drv_unused, result, path_unused, orig, NULL, src1, NULL, src2, NULL, @@ -149,6 +160,9 @@ static int ll_ext_merge(const struct ll_merge_driver *fn, int status, fd, i; struct stat st; + if (!opts) + die("BUG: !opts in custom merge driver"); + dict[0].placeholder = "O"; dict[0].value = temp[0]; dict[1].placeholder = "A"; dict[1].value = temp[1]; dict[2].placeholder = "B"; dict[2].value = temp[2]; -- 1.7.2.2 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html