Program: 183563
Project: 183563
Buggy source:
private void rebuildWebTextView(){
  if (!hasFocus() && (null == mWebTextView || !mWebTextView.hasFocus()) || (mTouchMode >= FIRST_SCROLL_ZOOM && mTouchMode <= LAST_SCROLL_ZOOM)) {
    return;
  }
  boolean alreadyThere=inEditingMode();
  if (0 == mNativeClass || !nativeFocusCandidateIsTextInput()) {
    if (alreadyThere) {
      mWebTextView.remove();
    }
    return;
  }
  if (mWebTextView == null) {
    mWebTextView=new WebTextView(mContext,WebView.this);
    mTextGeneration=0;
  }
  mWebTextView.setTextSize(contentToView(nativeFocusCandidateTextSize()));
  Rect visibleRect=sendOurVisibleRect();
  Rect bounds=nativeFocusCandidateNodeBounds();
  if (!Rect.intersects(bounds,visibleRect)) {
    return;
  }
  String text=nativeFocusCandidateText();
  int nodePointer=nativeFocusCandidatePointer();
  if (alreadyThere && mWebTextView.isSameTextField(nodePointer)) {
    Spannable spannable=(Spannable)mWebTextView.getText();
    int start=Selection.getSelectionStart(spannable);
    int end=Selection.getSelectionEnd(spannable);
    if (text != null && !text.equals(spannable.toString()) && nativeTextGeneration() == mTextGeneration) {
      mWebTextView.setTextAndKeepSelection(text);
    }
 else {
      Selection.setSelection(spannable,start,end);
    }
  }
 else {
    Rect vBox=contentToView(bounds);
    mWebTextView.setRect(vBox.left,vBox.top,vBox.width(),vBox.height());
    mWebTextView.setGravity(nativeFocusCandidateIsRtlText() ? Gravity.RIGHT : Gravity.NO_GRAVITY);
    mWebTextView.setNodePointer(nodePointer);
    int maxLength=-1;
    boolean isTextField=nativeFocusCandidateIsTextField();
    if (isTextField) {
      maxLength=nativeFocusCandidateMaxLength();
      String name=nativeFocusCandidateName();
      if (mWebViewCore.getSettings().getSaveFormData() && name != null) {
        Message update=mPrivateHandler.obtainMessage(REQUEST_FORM_DATA,nodePointer);
        RequestFormData updater=new RequestFormData(name,getUrl(),update);
        Thread t=new Thread(updater);
        t.start();
      }
    }
    mWebTextView.setMaxLength(maxLength);
    AutoCompleteAdapter adapter=null;
    mWebTextView.setAdapterCustom(adapter);
    mWebTextView.setSingleLine(isTextField);
    mWebTextView.setInPassword(nativeFocusCandidateIsPassword());
    if (null == text) {
      mWebTextView.setText("String_Node_Str",0,0);
    }
 else {
      if (false) {
        mWebTextView.setText(text,0,text.length());
      }
 else       if (isTextField) {
        int length=text.length();
        mWebTextView.setText(text,length,length);
      }
 else {
        mWebTextView.setText(text,0,0);
      }
    }
    mWebTextView.requestFocus();
  }
}

Fixed version (ground truth):
private void rebuildWebTextView(){
  if (!hasFocus() && (null == mWebTextView || !mWebTextView.hasFocus()) || (mTouchMode >= FIRST_SCROLL_ZOOM && mTouchMode <= LAST_SCROLL_ZOOM)) {
    return;
  }
  boolean alreadyThere=inEditingMode();
  if (0 == mNativeClass || !nativeFocusCandidateIsTextInput()) {
    if (alreadyThere) {
      mWebTextView.remove();
    }
    return;
  }
  if (mWebTextView == null) {
    mWebTextView=new WebTextView(mContext,WebView.this);
    mTextGeneration=0;
  }
  mWebTextView.setTextSize(contentToView(nativeFocusCandidateTextSize()));
  Rect visibleRect=new Rect();
  calcOurContentVisibleRect(visibleRect);
  Rect bounds=nativeFocusCandidateNodeBounds();
  if (!Rect.intersects(bounds,visibleRect)) {
    return;
  }
  String text=nativeFocusCandidateText();
  int nodePointer=nativeFocusCandidatePointer();
  if (alreadyThere && mWebTextView.isSameTextField(nodePointer)) {
    Spannable spannable=(Spannable)mWebTextView.getText();
    int start=Selection.getSelectionStart(spannable);
    int end=Selection.getSelectionEnd(spannable);
    if (text != null && !text.equals(spannable.toString()) && nativeTextGeneration() == mTextGeneration) {
      mWebTextView.setTextAndKeepSelection(text);
    }
 else {
      Selection.setSelection(spannable,start,end);
    }
  }
 else {
    Rect vBox=contentToView(bounds);
    mWebTextView.setRect(vBox.left,vBox.top,vBox.width(),vBox.height());
    mWebTextView.setGravity(nativeFocusCandidateIsRtlText() ? Gravity.RIGHT : Gravity.NO_GRAVITY);
    mWebTextView.setNodePointer(nodePointer);
    int maxLength=-1;
    boolean isTextField=nativeFocusCandidateIsTextField();
    if (isTextField) {
      maxLength=nativeFocusCandidateMaxLength();
      String name=nativeFocusCandidateName();
      if (mWebViewCore.getSettings().getSaveFormData() && name != null) {
        Message update=mPrivateHandler.obtainMessage(REQUEST_FORM_DATA,nodePointer);
        RequestFormData updater=new RequestFormData(name,getUrl(),update);
        Thread t=new Thread(updater);
        t.start();
      }
    }
    mWebTextView.setMaxLength(maxLength);
    AutoCompleteAdapter adapter=null;
    mWebTextView.setAdapterCustom(adapter);
    mWebTextView.setSingleLine(isTextField);
    mWebTextView.setInPassword(nativeFocusCandidateIsPassword());
    if (null == text) {
      mWebTextView.setText("String_Node_Str",0,0);
    }
 else {
      if (false) {
        mWebTextView.setText(text,0,text.length());
      }
 else       if (isTextField) {
        int length=text.length();
        mWebTextView.setText(text,length,length);
      }
 else {
        mWebTextView.setText(text,0,0);
      }
    }
    mWebTextView.requestFocus();
  }
}