Program: 86944
Project: 86944
Buggy source:
private static String getMeasurement(){
  final String audibleMode=prefs.getString("String_Node_Str","String_Node_Str");
  final float min=Float.parseFloat(prefs.getString("String_Node_Str","String_Node_Str"));
  final float max=Float.parseFloat(prefs.getString("String_Node_Str","String_Node_Str"));
  String measurement="String_Node_Str";
switch (audibleMode) {
case "String_Node_Str":
    if (MyLocationManager.lastLoc != null && MyLocationManager.lastFixDuration() < 5000) {
      final double horizontalSpeed=MyLocationManager.lastLoc.groundSpeed();
      if (Util.isReal(horizontalSpeed) && min <= horizontalSpeed && horizontalSpeed <= max) {
        measurement=Convert.speed(horizontalSpeed,0,false);
      }
 else {
        Log.w(TAG,"String_Node_Str" + Convert.speed(horizontalSpeed,0,true));
      }
    }
 else {
      Log.w(TAG,"String_Node_Str");
    }
  break;
case "String_Node_Str":
final double verticalSpeed=MyAltimeter.climb;
if (Util.isReal(verticalSpeed) && min <= verticalSpeed && verticalSpeed <= max) {
if (verticalSpeed > 0) {
  measurement="String_Node_Str" + Convert.speed(verticalSpeed,0,false);
}
 else {
  measurement=Convert.speed(-verticalSpeed,0,false);
}
}
 else {
Log.w(TAG,"String_Node_Str" + Convert.speed(verticalSpeed,0,true));
}
break;
case "String_Node_Str":
if (MyLocationManager.lastLoc != null && MyLocationManager.lastFixDuration() < 5000) {
final double glideRatio=MyLocationManager.lastLoc.glideRatio();
if (Util.isReal(glideRatio) && min <= glideRatio && glideRatio <= max) {
measurement=Convert.glide(glideRatio,1,false);
}
 else {
Log.w(TAG,"String_Node_Str" + Convert.glide(glideRatio,1,true));
}
}
 else {
Log.w(TAG,"String_Node_Str");
}
break;
default :
Log.e(TAG,"String_Node_Str" + audibleMode);
}
return measurement;
}

Fixed version (ground truth):
private static String getMeasurement(){
  final String audibleMode=prefs.getString("String_Node_Str","String_Node_Str");
  final double units=Convert.metric ? Convert.KPH : Convert.MPH;
  final double min=Util.parseDouble(prefs.getString("String_Node_Str","String_Node_Str"));
  final double max=Util.parseDouble(prefs.getString("String_Node_Str","String_Node_Str"));
  String measurement="String_Node_Str";
switch (audibleMode) {
case "String_Node_Str":
    if (MyLocationManager.lastLoc != null && MyLocationManager.lastFixDuration() < 5000) {
      final double horizontalSpeed=MyLocationManager.lastLoc.groundSpeed();
      if (Util.isReal(horizontalSpeed) && min * units <= horizontalSpeed && horizontalSpeed <= max * units) {
        measurement=Convert.speed(horizontalSpeed,0,false);
      }
 else {
        Log.w(TAG,"String_Node_Str" + Convert.speed(horizontalSpeed,0,true));
      }
    }
 else {
      Log.w(TAG,"String_Node_Str");
    }
  break;
case "String_Node_Str":
final double verticalSpeed=MyAltimeter.climb;
if (Util.isReal(verticalSpeed) && min * units <= verticalSpeed && verticalSpeed <= max * units) {
if (verticalSpeed > 0) {
  measurement="String_Node_Str" + Convert.speed(verticalSpeed,0,false);
}
 else {
  measurement=Convert.speed(-verticalSpeed,0,false);
}
}
 else {
Log.w(TAG,"String_Node_Str" + Convert.speed(verticalSpeed,0,true));
}
break;
case "String_Node_Str":
if (MyLocationManager.lastLoc != null && MyLocationManager.lastFixDuration() < 5000) {
final double glideRatio=MyLocationManager.lastLoc.glideRatio();
if (Util.isReal(glideRatio) && min <= glideRatio && glideRatio <= max) {
measurement=Convert.glide(glideRatio,1,false);
}
 else {
Log.w(TAG,"String_Node_Str" + Convert.glide(glideRatio,1,true));
}
}
 else {
Log.w(TAG,"String_Node_Str");
}
break;
default :
Log.e(TAG,"String_Node_Str" + audibleMode);
}
return measurement;
}