-- v2: winetest: Avoid underflow when computing filtered output size.
From: Rémi Bernon rbernon@codeweavers.com
--- programs/winetest/main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/programs/winetest/main.c b/programs/winetest/main.c index f505b85323a..755e4eb6e2c 100644 --- a/programs/winetest/main.c +++ b/programs/winetest/main.c @@ -909,11 +909,12 @@ static void *filter_data( const char *data, DWORD size, DWORD *output_size ) char *ret;
if (!(ret = malloc( size + 1 ))) return NULL; - for (i = j = eol = 0; i < size; i++) + for (i = j = 0, eol = -1; i < size; i++) { if (data[i] == '\x1b' && data[i + 1] == '[') { while (data[i] && data[i] != 'm') i++; + eol = i; } else if (data[i]) ret[j++] = data[i]; if (!strncmp( data + i, " Test succeeded", 15 )) ignore += i + 15 - eol;
Happens because j is the length without ANSI codes, and `ignore` striped entire "\n.*Test succeeded" lines, which may also include ANSI codes, removing them twice from the total.
v2: Fix it properly instead of hacking it.