I just investigated the same bug. "less" loses input lines because it does not count output lines correctly. The problem is that it assumes that east asian wide characters have width 1, but in reality, e.g. on xterm, these characters take 2 positions. In other words, the routine pwidth() in less-481:line.c is broken (since the is_wide_char(ch) returns false for characters that take two screen positions).
I just investigated the same bug. "less" loses input lines because it does not count output lines correctly. The problem is that it assumes that east asian wide characters have width 1, but in reality, e.g. on xterm, these characters take 2 positions. In other words, the routine pwidth() in less-481:line.c is broken (since the is_wide_char(ch) returns false for characters that take two screen positions).