Program: 20291
Project: 20291
Buggy source:
@Override public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException {
switch (m_iOutputType) {
case OUTPUT_NONE:
    if ("String_Node_Str".equals(qName)) {
      m_printer.getDevicePrinter(readString(attributes.getValue("String_Node_Str"),"String_Node_Str")).openDrawer();
    }
 else     if ("String_Node_Str".equals(qName)) {
      text=new StringBuffer();
    }
 else     if ("String_Node_Str".equals(qName)) {
      m_iOutputType=OUTPUT_TICKET;
      m_oOutputPrinter=m_printer.getDevicePrinter(readString(attributes.getValue("String_Node_Str"),"String_Node_Str"));
      m_oOutputPrinter.beginReceipt();
    }
 else     if ("String_Node_Str".equals(qName)) {
      m_iOutputType=OUTPUT_DISPLAY;
      String animation=attributes.getValue("String_Node_Str");
      if ("String_Node_Str".equals(animation)) {
        m_iVisorAnimation=DeviceDisplayBase.ANIMATION_SCROLL;
      }
 else       if ("String_Node_Str".equals(animation)) {
        m_iVisorAnimation=DeviceDisplayBase.ANIMATION_FLYER;
      }
 else       if ("String_Node_Str".equals(animation)) {
        m_iVisorAnimation=DeviceDisplayBase.ANIMATION_BLINK;
      }
 else       if ("String_Node_Str".equals(animation)) {
        m_iVisorAnimation=DeviceDisplayBase.ANIMATION_CURTAIN;
      }
 else {
        m_iVisorAnimation=DeviceDisplayBase.ANIMATION_NULL;
      }
      m_sVisorLine1=null;
      m_sVisorLine2=null;
      m_oOutputPrinter=null;
    }
 else     if ("String_Node_Str".equals(qName)) {
      m_iOutputType=OUTPUT_FISCAL;
      m_printer.getFiscalPrinter().beginReceipt();
    }
 else     if ("String_Node_Str".equals(qName)) {
      m_printer.getFiscalPrinter().printZReport();
    }
 else     if ("String_Node_Str".equals(qName)) {
      m_printer.getFiscalPrinter().printXReport();
    }
  break;
case OUTPUT_TICKET:
if ("String_Node_Str".equals(qName)) {
  text=new StringBuffer();
}
 else if ("String_Node_Str".equals(qName)) {
  text=new StringBuffer();
  bctype=attributes.getValue("String_Node_Str");
  bcposition=attributes.getValue("String_Node_Str");
}
 else if ("String_Node_Str".equals(qName)) {
  m_oOutputPrinter.beginLine(parseInt(attributes.getValue("String_Node_Str"),DevicePrinter.SIZE_0));
}
 else if ("String_Node_Str".equals(qName)) {
  text=new StringBuffer();
  m_iTextStyle=("String_Node_Str".equals(attributes.getValue("String_Node_Str")) ? DevicePrinter.STYLE_BOLD : DevicePrinter.STYLE_PLAIN) | ("String_Node_Str".equals(attributes.getValue("String_Node_Str")) ? DevicePrinter.STYLE_UNDERLINE : DevicePrinter.STYLE_PLAIN);
  String sAlign=attributes.getValue("String_Node_Str");
  if ("String_Node_Str".equals(sAlign)) {
    m_iTextAlign=DevicePrinter.ALIGN_RIGHT;
  }
 else   if ("String_Node_Str".equals(sAlign)) {
    m_iTextAlign=DevicePrinter.ALIGN_CENTER;
  }
 else {
    m_iTextAlign=DevicePrinter.ALIGN_LEFT;
  }
  m_iTextLength=parseInt(attributes.getValue("String_Node_Str"),0);
}
break;
case OUTPUT_DISPLAY:
if ("String_Node_Str".equals(qName)) {
m_sVisorLine=new StringBuffer();
}
 else if ("String_Node_Str".equals(qName)) {
m_sVisorLine=new StringBuffer();
}
 else if ("String_Node_Str".equals(qName)) {
m_sVisorLine=new StringBuffer();
}
 else if ("String_Node_Str".equals(qName)) {
text=new StringBuffer();
String sAlign=attributes.getValue("String_Node_Str");
if ("String_Node_Str".equals(sAlign)) {
m_iTextAlign=DevicePrinter.ALIGN_RIGHT;
}
 else if ("String_Node_Str".equals(sAlign)) {
m_iTextAlign=DevicePrinter.ALIGN_CENTER;
}
 else {
m_iTextAlign=DevicePrinter.ALIGN_LEFT;
}
m_iTextLength=parseInt(attributes.getValue("String_Node_Str"));
}
break;
case OUTPUT_FISCAL:
if ("String_Node_Str".equals(qName)) {
text=new StringBuffer();
m_dValue1=parseDouble(attributes.getValue("String_Node_Str"));
m_dValue2=parseDouble(attributes.getValue("String_Node_Str"),1.0);
}
 else if ("String_Node_Str".equals(qName)) {
text=new StringBuffer();
}
 else if ("String_Node_Str".equals(qName)) {
text=new StringBuffer();
m_dValue1=parseDouble(attributes.getValue("String_Node_Str"));
}
break;
}
}

Fixed version (ground truth):
@Override public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException {
switch (m_iOutputType) {
case OUTPUT_NONE:
    if ("String_Node_Str".equals(qName)) {
      m_printer.getDevicePrinter(readString(attributes.getValue("String_Node_Str"),"String_Node_Str")).openDrawer();
    }
 else     if ("String_Node_Str".equals(qName)) {
      text=new StringBuffer();
    }
 else     if ("String_Node_Str".equals(qName)) {
      m_iOutputType=OUTPUT_TICKET;
      m_oOutputPrinter=m_printer.getDevicePrinter(readString(attributes.getValue("String_Node_Str"),"String_Node_Str"));
      m_oOutputPrinter.beginReceipt();
    }
 else     if ("String_Node_Str".equals(qName)) {
      m_iOutputType=OUTPUT_DISPLAY;
      String animation=attributes.getValue("String_Node_Str");
      if ("String_Node_Str".equals(animation)) {
        m_iVisorAnimation=DeviceDisplayBase.ANIMATION_SCROLL;
      }
 else       if ("String_Node_Str".equals(animation)) {
        m_iVisorAnimation=DeviceDisplayBase.ANIMATION_FLYER;
      }
 else       if ("String_Node_Str".equals(animation)) {
        m_iVisorAnimation=DeviceDisplayBase.ANIMATION_BLINK;
      }
 else       if ("String_Node_Str".equals(animation)) {
        m_iVisorAnimation=DeviceDisplayBase.ANIMATION_CURTAIN;
      }
 else {
        m_iVisorAnimation=DeviceDisplayBase.ANIMATION_NULL;
      }
      m_sVisorLine1=null;
      m_sVisorLine2=null;
      m_oOutputPrinter=null;
    }
 else     if ("String_Node_Str".equals(qName)) {
      m_iOutputType=OUTPUT_FISCAL;
      m_printer.getFiscalPrinter().beginReceipt();
    }
 else     if ("String_Node_Str".equals(qName)) {
      m_printer.getFiscalPrinter().printZReport();
    }
 else     if ("String_Node_Str".equals(qName)) {
      m_printer.getFiscalPrinter().printXReport();
    }
  break;
case OUTPUT_TICKET:
if ("String_Node_Str".equals(qName)) {
  text=new StringBuffer();
}
 else if ("String_Node_Str".equals(qName)) {
  text=new StringBuffer();
  bctype=attributes.getValue("String_Node_Str");
  bcposition=attributes.getValue("String_Node_Str");
}
 else if ("String_Node_Str".equals(qName)) {
  m_oOutputPrinter.beginLine(parseInt(attributes.getValue("String_Node_Str"),DevicePrinter.SIZE_0));
}
 else if ("String_Node_Str".equals(qName)) {
  text=new StringBuffer();
  m_iTextStyle=("String_Node_Str".equals(attributes.getValue("String_Node_Str")) ? DevicePrinter.STYLE_BOLD : DevicePrinter.STYLE_PLAIN) | ("String_Node_Str".equals(attributes.getValue("String_Node_Str")) ? DevicePrinter.STYLE_UNDERLINE : DevicePrinter.STYLE_PLAIN);
  String sAlign=attributes.getValue("String_Node_Str");
  if ("String_Node_Str".equals(sAlign)) {
    m_iTextAlign=DevicePrinter.ALIGN_RIGHT;
  }
 else   if ("String_Node_Str".equals(sAlign)) {
    m_iTextAlign=DevicePrinter.ALIGN_CENTER;
  }
 else {
    m_iTextAlign=DevicePrinter.ALIGN_LEFT;
  }
  m_iTextLength=parseInt(attributes.getValue("String_Node_Str"),0);
}
break;
case OUTPUT_DISPLAY:
if ("String_Node_Str".equals(qName)) {
m_sVisorLine=new StringBuffer();
}
 else if ("String_Node_Str".equals(qName)) {
m_sVisorLine=new StringBuffer();
}
 else if ("String_Node_Str".equals(qName)) {
m_sVisorLine=new StringBuffer();
}
 else if ("String_Node_Str".equals(qName)) {
text=new StringBuffer();
String sAlign=attributes.getValue("String_Node_Str");
if ("String_Node_Str".equals(sAlign)) {
m_iTextAlign=DevicePrinter.ALIGN_RIGHT;
}
 else if ("String_Node_Str".equals(sAlign)) {
m_iTextAlign=DevicePrinter.ALIGN_CENTER;
}
 else {
m_iTextAlign=DevicePrinter.ALIGN_LEFT;
}
m_iTextLength=parseInt(attributes.getValue("String_Node_Str"));
}
break;
case OUTPUT_FISCAL:
if ("String_Node_Str".equals(qName)) {
text=new StringBuffer();
m_dValue1=parseDouble(attributes.getValue("String_Node_Str"));
m_dValue2=parseDouble(attributes.getValue("String_Node_Str"),1.0);
attribute3=parseInt(attributes.getValue("String_Node_Str"));
}
 else if ("String_Node_Str".equals(qName)) {
text=new StringBuffer();
}
 else if ("String_Node_Str".equals(qName)) {
text=new StringBuffer();
m_dValue1=parseDouble(attributes.getValue("String_Node_Str"));
}
break;
}
}