Program: 78195
Project: 78195
Buggy source:
@Override public void onSurfaceChanged(GL10 gl,int width,int height){
  mWidth=width;
  mHeight=height;
  mProgramId=GLES20.glCreateProgram();
  String vertexShaderSource=TextResourceReader.readTextFileFromResource(context,R.raw.pano_vertex_shader);
  String fragmentShaderSource=TextResourceReader.readTextFileFromResource(context,R.raw.pano_fragment_shader);
  int vertexShaderId=GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
  glShaderSource(vertexShaderId,vertexShaderSource);
  glCompileShader(vertexShaderId);
  int fragmentShaderId=GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER);
  glShaderSource(fragmentShaderId,fragmentShaderSource);
  glCompileShader(fragmentShaderId);
  glAttachShader(mProgramId,vertexShaderId);
  glAttachShader(mProgramId,fragmentShaderId);
  glLinkProgram(mProgramId);
  mPositionHandle=glGetAttribLocation(mProgramId,"String_Node_Str");
  mTexCoordHandle=glGetAttribLocation(mProgramId,"String_Node_Str");
  mMatrixHandle=glGetUniformLocation(mProgramId,"String_Node_Str");
  mTexSamplerHandle=glGetUniformLocation(mProgramId,"String_Node_Str");
  mTexNames=new int[1];
  glGenTextures(1,mTexNames,0);
  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_2D,mTexNames[0]);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
  GLUtils.texImage2D(GL_TEXTURE_2D,0,bitmap,0);
  bitmap.recycle();
  float ratio=(float)height / width;
  this.ratio=ratio;
  Matrix.frustumM(mProjectionMatrix,0,-1,1,-ratio,ratio,0.78f,7);
  if (LoggerConfig.ON) {
    Log.d(TAG,"String_Node_Str" + "String_Node_Str" + height + '\t'+ "String_Node_Str"+ width+ '\t'+ "String_Node_Str"+ ratio);
  }
}

Fixed version (ground truth):
@Override public void onSurfaceChanged(GL10 gl,int width,int height){
  mWidth=width;
  mHeight=height;
  mProgramId=GLES20.glCreateProgram();
  String vertexShaderSource=TextResourceReader.readTextFileFromResource(context,R.raw.pano_vertex_shader);
  String fragmentShaderSource=TextResourceReader.readTextFileFromResource(context,R.raw.pano_fragment_shader);
  int vertexShaderId=GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
  glShaderSource(vertexShaderId,vertexShaderSource);
  glCompileShader(vertexShaderId);
  int fragmentShaderId=GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER);
  glShaderSource(fragmentShaderId,fragmentShaderSource);
  glCompileShader(fragmentShaderId);
  glAttachShader(mProgramId,vertexShaderId);
  glAttachShader(mProgramId,fragmentShaderId);
  glLinkProgram(mProgramId);
  mPositionHandle=glGetAttribLocation(mProgramId,"String_Node_Str");
  mTexCoordHandle=glGetAttribLocation(mProgramId,"String_Node_Str");
  mMatrixHandle=glGetUniformLocation(mProgramId,"String_Node_Str");
  mTexSamplerHandle=glGetUniformLocation(mProgramId,"String_Node_Str");
  mTexNames=new int[1];
  glGenTextures(1,mTexNames,0);
  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_2D,mTexNames[0]);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
  GLUtils.texImage2D(GL_TEXTURE_2D,0,bitmap,0);
  bitmap.recycle();
  float ratio=(float)height / width;
  this.ratio=ratio;
  Matrix.frustumM(mProjectionMatrix,0,-1,1,-ratio,ratio,3f,7);
  if (LoggerConfig.ON) {
    Log.d(TAG,"String_Node_Str" + "String_Node_Str" + height + '\t'+ "String_Node_Str"+ width+ '\t'+ "String_Node_Str"+ ratio);
  }
}