contrib/fuzz/bdiff.cc
author Martin von Zweigbergk <martinvonz@google.com>
Fri, 01 Feb 2019 22:52:09 -0800
changeset 41577 5f827e9ce870
parent 38173 fa0ddd5e8fff
child 43613 dbc39f028c9f
permissions -rw-r--r--
status: if ui.relative-paths=no, don't use relative paths even with patterns Without ui.relative-paths or command.status.relative set, you get this behavior: hgext$ hg st M hgext/narrow/narrowrepo.py hgext$ hg st . M narrow/narrowrepo.py hgext$ hg st narrow M narrow/narrowrepo.py I think it's surprising that some of those produce relative paths. I suspect it works that way because "hg st ." was an easy way of getting relative paths. Perhaps not much thought was given to how it should behave when the pattern was not ".". It also feels wrong to conflate the request for relative patterns with matching of of patterns. Since we can now start fresh and define the behavior of ui.relative-paths as we want, I suggest we make ui.relative-paths=no consistently not give relative paths. So that's what this paths starts doing for `hg status`. Differential Revision: https://phab.mercurial-scm.org/D5802

/*
 * bdiff.cc - fuzzer harness for bdiff.c
 *
 * Copyright 2018, Google Inc.
 *
 * This software may be used and distributed according to the terms of
 * the GNU General Public License, incorporated herein by reference.
 */
#include <memory>
#include <stdlib.h>

#include "fuzzutil.h"

extern "C" {
#include "bdiff.h"

int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size)
{
	auto maybe_inputs = SplitInputs(Data, Size);
	if (!maybe_inputs) {
		return 0;
	}
	auto inputs = std::move(maybe_inputs.value());

	struct bdiff_line *a, *b;
	int an = bdiff_splitlines(inputs.left.get(), inputs.left_size, &a);
	int bn = bdiff_splitlines(inputs.right.get(), inputs.right_size, &b);
	struct bdiff_hunk l;
	bdiff_diff(a, an, b, bn, &l);
	free(a);
	free(b);
	bdiff_freehunks(l.next);
	return 0; // Non-zero return values are reserved for future use.
}

#ifdef HG_FUZZER_INCLUDE_MAIN
int main(int argc, char **argv)
{
	const char data[] = "asdf";
	return LLVMFuzzerTestOneInput((const uint8_t *)data, 4);
}
#endif

} // extern "C"