commit - fbbf4c35d476db3fcb541151a6acb5c8ce63ce81
commit + f2aebda43f1e6ea926543dc93171a423a0bf5fd5
blob - f6dcef58bb67e1a01ce4a633f7928a184a56ebb1
blob + 0716796d2d5147368425b3edd6cc0e00d8ddc9ea
--- include/diff/diff_main.h
+++ include/diff/diff_main.h
* 0). Also works for diff_data that reference only a subsection of a file, always reflecting the global position in
* the file (and not the relative position within the subsection). */
#define diff_atom_root_idx(DIFF_DATA, ATOM) \
- ((ATOM) ? (ATOM) - ((DIFF_DATA)->root->atoms.head) : (DIFF_DATA)->root->atoms.len)
+ ((ATOM) && ((ATOM) >= (DIFF_DATA)->root->atoms.head) \
+ ? (unsigned int)((ATOM) - ((DIFF_DATA)->root->atoms.head)) \
+ : (DIFF_DATA)->root->atoms.len)
/* The atom's index within DIFF_DATA. For atoms divided by lines of text, this yields the line number (starting with
* 0). */
#define diff_atom_idx(DIFF_DATA, ATOM) \
- ((ATOM) ? (ATOM) - ((DIFF_DATA)->atoms.head) : (DIFF_DATA)->atoms.len)
+ ((ATOM) && ((ATOM) >= (DIFF_DATA)->atoms.head) \
+ ? (unsigned int)((ATOM) - ((DIFF_DATA)->atoms.head)) \
+ : (DIFF_DATA)->atoms.len)
#define foreach_diff_atom(ATOM, FIRST_ATOM, COUNT) \
for ((ATOM) = (FIRST_ATOM); \
blob - 17a6bffe139d685b095825de47ef10ff51e508b5
blob + 590243706ebb8b6777cc13e94fb338833ee013ba
--- lib/diff_patience.c
+++ lib/diff_patience.c
if (i < lcs_count) {
atom = lcs[i];
atom_r = atom->patience.pos_in_other;
- debug("lcs[%u] = left[%u] = right[%u]\n", i,
+ debug("lcs[%u] = left[%ld] = right[%ld]\n", i,
diff_atom_idx(left, atom), diff_atom_idx(right, atom_r));
left_idx = atom->patience.identical_lines.start;
right_idx = atom_r->patience.identical_lines.start;