FULL PRODUCT VERSION :
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Linux drums 2.6.34-12-desktop #1 SMP PREEMPT 2010-06-29 02:39:08 +0200 x86_64 x86_64 x86_64 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
Writing an image using the ImageIO class while not having enough permissions to do so throws a NullPointerException:
Caused by: java.lang.NullPointerException
at javax.imageio.ImageIO.write(ImageIO.java:1538)
at com.atlassian.jira.avatar.AvatarManagerImpl.processImage(AvatarManagerImpl.java:255)
at com.atlassian.jira.avatar.AvatarManagerImpl.create(AvatarManagerImpl.java:153)
at com.atlassian.jira.avatar.AvatarPickerHelperImpl.convertTemporaryToReal(AvatarPickerHelperImpl.java:174)
at sun.reflect.GeneratedMethodAccessor1694.invoke(Unknown Source)
Looking at the source code, the createImageOutputStream function can return a null stream, but nullity is not checked when closing it.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The write method throws a proper exception, that let the user understand there is a security violation.
ACTUAL -
The write method throws a NullPointerException.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
NullPointerException:
Caused by: java.lang.NullPointerException
at javax.imageio.ImageIO.write(ImageIO.java:1538)
at com.atlassian.jira.avatar.AvatarManagerImpl.processImage(AvatarManagerImpl.java:255)
at com.atlassian.jira.avatar.AvatarManagerImpl.create(AvatarManagerImpl.java:153)
at com.atlassian.jira.avatar.AvatarPickerHelperImpl.convertTemporaryToReal(AvatarPickerHelperImpl.java:174)
at sun.reflect.GeneratedMethodAccessor1694.invoke(Unknown Source)
REPRODUCIBILITY :
This bug can be reproduced always.