[Bug 267032] diff(1) -U and -C with very large number of context may produce incorrect line indicator
Date: Sat, 15 Oct 2022 09:54:51 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=267032 Daniel Tameling <tamelingdaniel@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |tamelingdaniel@gmail.com --- Comment #1 from Daniel Tameling <tamelingdaniel@gmail.com> --- I had a look at this and there are two kinds of overflows that happen. The first is for the line number. Here the code does something like upd = MIN(len[1], context_vec_ptr->d + diff_context); where the addition can overflow. The fix is to just use len[1] if that would happen. The second overflow happens when checking whether the current chuck overlaps with the next one. This is why the command you posted has so much output; it should just be one large chunk. The code of the check is } else if (a > context_vec_ptr->b + (2 * diff_context) + 1 && c > context_vec_ptr->d + (2 * diff_context) + 1) { To fix this one should check if an overflow would happen and if that is the case to not execute the body of the else if. -- You are receiving this mail because: You are the assignee for the bug.