Uploaded image for project: 'Couchbase .NET client library'
  1. Couchbase .NET client library
  2. NCBC-1150

Subdocument - Lookup fails when getting hierarchical subdocument

    XMLWordPrintable

    Details

    • Type: Task
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.3.1
    • Fix Version/s: 2.3.3
    • Component/s: library
    • Labels:
    • Environment:
      .NET, Windows

      Description

      Summary: When getting a subdocument that isn't a simple value, the .NET library fails with InvalidOperationException.

      Repro:

      1. Create document with at least one hierarchical property
      2. Perform a subdocument lookup on that property.
      (see attached code sample)

      Expected
      Success, the subdocument to be returned.

      Actual
      InvalidOperationException, no indication of what the user did wrong.

      Notes:
      I emailed this to Jeff:

      I’ve stepped through the code just to see if I could figure out what’s going on. I might have found a bug?

      In this line of MultiLookup.cs: https://github.com/couchbase/couchbase-net-client/blob/master/Src/Couchbase/IO/Operations/SubDocument/MultiLookup.cs#L103

      It’s passing the length of the body to IsJson. So if the byte array is 50, it passes 50.

      But in IsJSON, that parameter is called “endIndex”, and is passed directly to the byte array indexer: https://github.com/couchbase/couchbase-net-client/blob/master/Src/Couchbase/Utils/ArrayExtensions.cs#L184

      This means that in some situations (like the one I’m encountering, maybe), it will try “theArray[50]” on an array that is size 50. Hence the ‘out of range’ exception. It doesn’t ALWAYS happen because that code might short circuit. It also seems like an odd/imprecise way to determine if a byte array is JSON or not. I would assume you’d encode it to a string and use JSON.net to determine. But maybe it’s an optimization?

      Just for fun, I changed “endIndex” to “endIndex-1” inside of IsJSON, and now it works.

      I don’t know if that’s the right fix, but I think it must be a bug.

        Attachments

        For Gerrit Dashboard: NCBC-1150
        # Subject Branch Project Status CR V

          Activity

          Hide
          matthew.groves Matthew Groves added a comment -

          I meant to make this a Bug, not a Task, sorry.

          Show
          matthew.groves Matthew Groves added a comment - I meant to make this a Bug, not a Task, sorry.

            People

            • Assignee:
              jmorris Jeff Morris
              Reporter:
              matthew.groves Matthew Groves
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Gerrit Reviews

                There are no open Gerrit changes

                  PagerDuty

                  Error rendering 'com.pagerduty.jira-server-plugin:PagerDuty'. Please contact your Jira administrators.