Program: 9013
Project: 9013
Buggy source:
/** 
 * Rechunks the strings based on a regex pattern and works on infinite stream. <pre> split(["boo:an", "d:foo"], ":") --> ["boo", "and", "foo"] split(["boo:an", "d:foo"], "o") --> ["b", "", ":and:f", "", ""] </pre> See   {@link Pattern}<p> <img width="640" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/St.split.png" alt="">
 * @param src the source that should be use for the split
 * @param pattern pre compiled regular expression pattern for the split functionality
 * @return the Observable streaming the split values
 */
public static Observable<String> split(final Observable<String> src,final Pattern pattern){
  return src.lift(new Operator<String,String>(){
    @Override public Subscriber<? super String> call(    final Subscriber<? super String> o){
      return new Subscriber<String>(o){
        private String leftOver=null;
        @Override public void onCompleted(){
          if (leftOver != null)           output(leftOver);
          if (!o.isUnsubscribed())           o.onCompleted();
        }
        @Override public void onError(        Throwable e){
          if (leftOver != null)           output(leftOver);
          if (!o.isUnsubscribed())           o.onError(e);
        }
        @Override public void onNext(        String segment){
          String[] parts=pattern.split(segment,-1);
          if (leftOver != null)           parts[0]=leftOver + parts[0];
          for (int i=0; i < parts.length - 1; i++) {
            String part=parts[i];
            output(part);
          }
          leftOver=parts[parts.length - 1];
        }
        private int emptyPartCount=0;
        /** 
 * when limit == 0 trailing empty parts are not emitted.
 * @param part
 */
        private void output(        String part){
          if (part.isEmpty()) {
            emptyPartCount++;
          }
 else {
            for (; emptyPartCount > 0; emptyPartCount--)             if (!o.isUnsubscribed())             o.onNext("String_Node_Str");
            if (!o.isUnsubscribed())             o.onNext(part);
          }
        }
      }
;
    }
  }
);
}

Fixed version (ground truth):
/** 
 * Rechunks the strings based on a regex pattern and works on infinite stream. <pre> split(["boo:an", "d:foo"], ":") --> ["boo", "and", "foo"] split(["boo:an", "d:foo"], "o") --> ["b", "", ":and:f", "", ""] </pre> See   {@link Pattern}<p> <img width="640" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/St.split.png" alt="">
 * @param src the source that should be use for the split
 * @param pattern pre compiled regular expression pattern for the split functionality
 * @return the Observable streaming the split values
 */
public static Observable<String> split(final Observable<String> src,final Pattern pattern){
  return src.lift(new Operator<String,String>(){
    @Override public Subscriber<? super String> call(    final Subscriber<? super String> o){
      return new Subscriber<String>(o){
        private String leftOver=null;
        @Override public void onCompleted(){
          if (leftOver != null)           output(leftOver);
          if (!o.isUnsubscribed())           o.onCompleted();
        }
        @Override public void onError(        Throwable e){
          if (leftOver != null)           output(leftOver);
          if (!o.isUnsubscribed())           o.onError(e);
        }
        @Override public void onNext(        String segment){
          if (leftOver != null)           segment=leftOver + segment;
          String[] parts=pattern.split(segment,-1);
          for (int i=0; i < parts.length - 1; i++) {
            String part=parts[i];
            output(part);
          }
          leftOver=parts[parts.length - 1];
        }
        private int emptyPartCount=0;
        /** 
 * when limit == 0 trailing empty parts are not emitted.
 * @param part
 */
        private void output(        String part){
          if (part.isEmpty()) {
            emptyPartCount++;
          }
 else {
            for (; emptyPartCount > 0; emptyPartCount--)             if (!o.isUnsubscribed())             o.onNext("String_Node_Str");
            if (!o.isUnsubscribed())             o.onNext(part);
          }
        }
      }
;
    }
  }
);
}