Jörg Michelberger created DIRMINA-990:
-----------------------------------------
Summary: Control flow over exceptional path in AbstractIoBuffer
Key: DIRMINA-990
URL: https://issues.apache.org/jira/browse/DIRMINA-990
Project: MINA
Issue Type: Improvement
Components: Core
Affects Versions: 2.0.8
Reporter: Jörg Michelberger
There is control flow over exceptional path in
ObjectOutputStream.writeClassDescriptor() method used in
AbstractIoBuffer.putObject, so that serialization of primitive types is done
via exception path. As an other point, serialization of array types is done via
asking the classloader with a ClassForName call. Both could be a performance
issue. I append the original sourcce and a possible fix for this issue, which
hopefully hits all cases the inventor of the original code wants to hit. Is it
possible to get this in the upcomming 2.0.9 release of MINA?
Original code:
{code}
protected void writeClassDescriptor(ObjectStreamClass desc)
throws IOException {
try {
Class<?> clz = Class.forName(desc.getName());
if (!Serializable.class.isAssignableFrom(clz)) { //
NON-Serializable class
write(0);
super.writeClassDescriptor(desc);
} else { // Serializable class
write(1);
writeUTF(desc.getName());
}
} catch (ClassNotFoundException ex) { // Primitive types
write(0);
super.writeClassDescriptor(desc);
}
}
{code}
Possible fix
{code}
protected void writeClassDescriptor(ObjectStreamClass desc)
throws IOException {
if (desc.forClass().isArray() ||
desc.forClass().isPrimitive() ||
!Serializable.class.isAssignableFrom(desc.forClass())) {
write(0);
super.writeClassDescriptor(desc);
} else {
// Serializable class
write(1);
writeUTF(desc.getName());
}
}
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)