code: protected String parseLocalName2(int start, int hash)
          throws XMLStreamException
      {
          int ptr = mInputEnd - start;
          // Let's assume fairly short names
          char[] outBuf = getNameBuffer(ptr+8);
  
          if (ptr > 0) {
              System.arraycopy(mInputBuffer, start, outBuf, 0, ptr);
          }
  
          int outLen = outBuf.length;
          while (true) {
              // note: names can not cross input block (entity) boundaries...
              if (mInputPtr >= mInputEnd) {
                  if (!loadMoreFromCurrent()) {
                      break;
                  }
              }
              char c = mInputBuffer[mInputPtr];
              if (c < CHAR_LOWEST_LEGAL_LOCALNAME_CHAR) {
                  break;
              }
              if (!isNameChar(c)) {
                  break;
              }
              ++mInputPtr;
              if (ptr >= outLen) {
                  mNameBuffer = outBuf = expandBy50Pct(outBuf);
                  outLen = outBuf.length;
              }
              outBuf[ptr++] = c;
              hash = (hash * 31) + c;
          }
          // Still need to canonicalize the name:
          return mSymbols.findSymbol(outBuf, 0, ptr, hash);
      }
docs: Second part of name token parsing; called when name can continue
  past input buffer end (so only part was read before calling this
  method to read the rest).
  <p>
  Note that this isn't heavily optimized, on assumption it's not
  called very often.