Inconsistent operation of F.conv2d()

I am getting inconsistent results when I tried doing the convolution operation using F.conv2d()

Lets say h**2 is the input and w>=0 is the filter kernel. Now, F.conv2d(h**2,w,padding=1) and F.conv2d(h**2,w) should give only non-negative results. However, to my surprise, the former does give negative numbers in the output for some w>=0. Mathematically padding should not affect the sign change

Seems quite impossible, since h**2 is guaranteed to be [0,inf]^Rn and w>=0. Could you provide some accompanying code?