[ 
https://issues.apache.org/jira/browse/OAK-5506?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15847430#comment-15847430
 ] 

Michael Dürig commented on OAK-5506:
------------------------------------

Round-tripping effectively means accepting such "strings". This in turn means 
we need to support all further operations this might induce. E.g. converting A 
JCR string value to binary (UTF-8), which cannot not work as the following test 
shows (also failing on JR2):

{code}
        String in = "foo\ud800";
        Value v = valueFactory.createValue(in);
        String out = valueFactory.createValue(v.getBinary()).getString();
        assertEquals(in, out);
{code}

Rejecting means we would effectively need to cover the whole JCR API surface 
for all the cases where a String argument is present. 

Both options don't seem viable to me. Instead my preference would be to ignore 
such cases and specify the behaviour when passing invalid String values to APIs 
as undefined. Rubbish in rubbish out. 

> Segment store apparently doesn't round trip node names with unpaired 
> surrogates
> -------------------------------------------------------------------------------
>
>                 Key: OAK-5506
>                 URL: https://issues.apache.org/jira/browse/OAK-5506
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: segment-tar
>    Affects Versions: 1.5.18
>            Reporter: Julian Reschke
>            Assignee: Francesco Mari
>         Attachments: OAK-5506-01.patch, OAK-5506-02.patch, ValidNamesTest.java
>
>
> Apparently, the following node name is accepted:
>    {{"foo\ud800"}}
> but a subsequent {{getPath()}} call fails:
> {noformat}
> javax.jcr.InvalidItemStateException: This item [/test_node/foo?] does not 
> exist anymore
>     at 
> org.apache.jackrabbit.oak.jcr.delegate.ItemDelegate.checkAlive(ItemDelegate.java:86)
>     at 
> org.apache.jackrabbit.oak.jcr.session.operation.ItemOperation.checkPreconditions(ItemOperation.java:34)
>     at 
> org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.prePerform(SessionDelegate.java:615)
>     at 
> org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:205)
>     at 
> org.apache.jackrabbit.oak.jcr.session.ItemImpl.perform(ItemImpl.java:112)
>     at 
> org.apache.jackrabbit.oak.jcr.session.ItemImpl.getPath(ItemImpl.java:140)
>     at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl.getPath(NodeImpl.java:106)
>     at 
> org.apache.jackrabbit.oak.jcr.ValidNamesTest.nameTest(ValidNamesTest.java:271)
>     at 
> org.apache.jackrabbit.oak.jcr.ValidNamesTest.testUnpairedSurrogate(ValidNamesTest.java:259)
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source){noformat}
> (test case follows)



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to