tinkerpop-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dan LaRocque (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (TINKERPOP-1251) NPE in ObjectWritable.toString
Date Wed, 06 Apr 2016 21:52:25 GMT

    [ https://issues.apache.org/jira/browse/TINKERPOP-1251?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15229208#comment-15229208

Dan LaRocque commented on TINKERPOP-1251:

bq. I fixed also a potential compareTo bug related to NPE.

Can you link it?  I noticed that compareTo would throw NPE if its parameter is null, but that's
the right behavior.


    NullPointerException - if the specified object is null

{{equals}} and {{hashCode}} were a bit trickier to read, but I think they are correct because
{{null instanceof X}} evaluates to false rather than throwing an exception.

> NPE in ObjectWritable.toString
> ------------------------------
>                 Key: TINKERPOP-1251
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1251
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: io
>    Affects Versions: 3.1.1-incubating
>            Reporter: Dan LaRocque
>            Assignee: Marko A. Rodriguez
>             Fix For: 3.2.0-incubating, 3.1.2-incubating
> ObjectWritable is a fancy wrapper around single reference named {{t}}.
> ObjectWritable is internally inconsistent about whether {{t==null}} is allowed.
> {{toString}} suggests that {{t==null}} is an illegal state, since it throws NPE:
> {code}
>     public String toString() {
>         return this.t.toString();
>     }
> {code}
> Compare with {{isEmpty}}, which suggests that {{t==null}} is a legal state:
> {code}
>     public boolean isEmpty() {
>         return null == this.t;
>     }
> {code}
> IMO toString should just tolerate null.
> Why does this matter?  One case where this {{toString}} gets invoked is Java serialization
with debugging info turned on ("sun.io.serialization.extendedDebugInfo" sys prop).  When so
configured, Java serialization code (ObjectOutputStream) invokes {{toString}} on the objects
it processes.  If {{toString}} throws this NPE, serialization fails.  This is frustrating,
since serialization of null ObjectWritables works fine with debugging info suppressed, but
breaks with debugging info enabled.

This message was sent by Atlassian JIRA

View raw message