Automated Program Repair (APR) for Null Pointer Exceptions (NPEs) is often hindered by either false positive or bloated patches
that make unnecessary changes. Applying one of these problematic patches to a program can make it incorrect, even unsafe. This paper introduces NilGuard, a novel APR tool built on the under-approximate foundation of Incorrectness Separation Logic to combat both problems. For patch bloat, it presents a measure that approximates the impact of a patch on the rest of program. We formalise APR for NPEs as an alias-aware transformation problem, solved via two canonical repair schema, Skip and Replace, and a novel three stage compaction algorithm that finds Pareto-optimal patches for our patch bloat metric. Our experiments on over 1.5MLOC show that NilGuard outperforms the state-of-the-art APR tools: it generates 28.7% more safe patches (31.9% - 3.2%) and fewer patches for false positives; its patches are less bloated: a median of 3.75 unnecessary statements against 1.