buffer = malloc(abs(3L - size) + 1);
fread(buffer, abs(3L - size), 1, file);
...
fwrite(buffer, strlen(buffer), 1, file);
You never null-terminate buffer
so you potentially write a different about to what you read. Do this instead. (But really, use size-3
or something nicer...)
fwrite(buffer, abs(3L - size), 1, file);