NSA, Ghidra рдФрд░ Unicorns

NSA, Ghidra рдФрд░ Unicorns

рдЗрд╕ рдмрд╛рд░, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЯреАрдо рдХреЛ рдШрд┐рджреНрд░рд╛ рджреНрд╡рд╛рд░рд╛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рдФрд░ рдмреБрд░реА рд░реВрдкрд░реЗрдЦрд╛ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдбрд░рд╛рд╡рдиреА рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдирдПрд╕рдП рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЧрд┐рдЯрд╣рдм рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рддрд░рдл, рдХреЛрдб рдЖрдзрд╛рд░ рдХреЛ рд╕рд╛рдл рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдирдПрд╕рдП рдХреЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрд╕рд╛рдзрди рд╣реИрдВред рдФрд░ рджреВрд╕рд░реА рдУрд░, рдирдП рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛ рдЬреЛ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рдереЗ, рдЧрд▓рддреА рд╕реЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреАрдбрд╝реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рд▓реИрд╕, рд╣рдордиреЗ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ 651 рдЙрдЪреНрдЪ, 904 рдордзреНрдпрдо, рдФрд░ 909 рдХрдо рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдЬрд╛рд░реА рдХреАрдВ, рдЬреЛ рдХрд┐ рдШрд┐рджреНрд░рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЬрд╛рд╡рд╛ рднрд╛рдЧ рдореЗрдВ рдЬрд╛рд░реА рд╣реИ ( 9.1.2, 687ce7f рдЬрд╛рд░реА )ред рдЙрдирдореЗрдВ рд╕реЗ, рдЙрдЪреНрдЪ рдФрд░ рдордзреНрдпрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рдЧрднрдЧ рдЖрдзреЗ V6022 рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдереЗредрдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдзрд┐ рдХреЗ рд╢рд░реАрд░ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ", рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдЬрдм рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА рдпрд╛ рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдХреНрд╖рдо рдХреА рдЧрдИ рдереАред рдЗрди рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдкрд░ рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ (рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдПрдХ рдмрд╛рд╣рд░реА рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рд╣реИрдВ) ) рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрджреЗрд╣рд╛рд╕реНрдкрдж рдХреБрдЫ рднреА рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реБрдЖред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЗрд╕ рдирд┐рджрд╛рди рдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЖрдк рдЕрдХреНрд╕рд░ рд╕реЗрдЯрд░ рдпрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдирд╛рдо рдкрд░ рдЯрд╛рдЗрдкреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдорддреМрд░ рдкрд░, рдЗрд╕реЗ рдмреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд╛рдардХ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рдПрдХ рд╕рдорд╛рди рдЕрдкреНрд░рд┐рдп рдкреИрдЯрд░реНрди рдкрд░ рдЖрддреЗ рд╣реИрдВ:

public class A {
  private String value;
  public A(String val) { // V6022
    this.value = value;
  }
  public int hashCode() {
    return value.hashCode(); // NullPointerException
  }
}

рдЖрдзреЗ рд╕реЗ рдЕрдзрд┐рдХ рдХрдо рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ " рд╡реИрд░рд┐рдПрдмрд▓ " " рд╡реЗрд░рд┐рдПрдВрдЯ " рдХреЗ " V6008 рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рд╛рдВрддрд┐ рдирд┐рд╡рд╛рд░рдг " рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рдереАрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди File.getParentFile () рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдирд▓ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕ рдкрд░ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреВрд░реНрдг рдкрде рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрд╢рдХреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдЖрд╡реЗрджрди рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреА рд╣реИред

рдкрд░рдВрдкрд░рд╛ рд╕реЗ, рд╣рдо рдХреЗрд╡рд▓ рдЙрдЪреНрдЪ рдФрд░ рдордзреНрдпрдо рд╕реНрддрд░ рдХреА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдереЛрдХ рдЙрдирдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИрдВред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рд╣рдо рд╣рдореЗрд╢рд╛ рдЙрдирдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЗ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХреЗрддрд┐рдд рдХреБрдЫ рдЕрдВрд╢реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рд╕рдВрджреЗрд╣рд╛рд╕реНрдкрдж рдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧреЗред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдХреЛрдб рдЖрдзрд╛рд░ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдЖрдХрд╛рд░ рдХрд╛ рдирд┐рдХрд▓рд╛, рдФрд░ рдРрд╕реА рдЬрдЧрд╣реЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдвреВрдВрдврдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИред

рдЦрдВрдб 1: рдЯреВрдЯрд╛ рд╣реБрдЖ рд╕рддреНрдпрд╛рдкрди


private boolean parseDataTypeTextEntry()
throws InvalidDataTypeException {
  ...
  try {
    newDataType = parser.parse(selectionField.getText(),
                               getDataTypeRootForCurrentText());
  }
  catch (CancelledException e) {
    return false;
  }
  if (newDataType != null) {
    if (maxSize >= 0
        && newDataType.getLength() > newDataType.getLength()) { // <=
      throw new InvalidDataTypeException("data-type larger than "
                                         + maxSize + " bytes");
    }
    selectionField.setSelectedValue(newDataType);
    return true;
  }
  return false;
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V6001 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ 'newDataType.getLength ()' рдмрд╛рдИрдВ рдУрд░ рдФрд░ '>' рдСрдкрд░реЗрдЯрд░ рдХреЗ рджрд╛рдИрдВ рдУрд░ред DataTypeSelectionEditor.java data66

рдпрд╣ рд╡рд░реНрдЧ рдСрдЯреЛ-рдкреВрд░реНрдгрддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд┐рддреНрд░рдордп рдШрдЯрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░ рдЪрдпрдирд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ ( рдЕрдзрд┐рдХрддрдо рдХреНрд╖реЗрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ) рдХреЗ рдЕрдзрд┐рдХрддрдо рдЕрдиреБрдордд рдЖрдХрд╛рд░ рдХреЛ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рди рд╕реЗрдЯ рдХрд░рдХреЗ рдЗрд╕реЗ рдЕрд╕реАрдорд┐рдд рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ рдХрд┐ рдЬрдм рдкреНрд░рд╡реЗрд╢ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ, рдЬреЛ рддрдм рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЛ рдкрдХрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп рдШрдЯрдХ рдХрд╛ рд▓реЗрдЦрдХ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛ рдЧрдпрд╛ рдерд╛, рдпрд╛ рд╢рд╛рдпрдж рдЙрд╕рдиреЗ рдЬреАрд╡рди рдХреЗ рдЕрд░реНрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ, рд╕рддреНрдпрд╛рдкрди рдХреЗрд╡рд▓ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдЦреНрдпрд╛ рдХрднреА рднреА рдЦреБрдж рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░, рддрджрдиреБрд╕рд╛рд░, рд╣рдо рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдШрдЯрдХ рдЕрдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕реА рддрд░рд╣ рдХреА рдПрдХ рдФрд░ рддреНрд░реБрдЯрд┐ рджреЛ рдФрд░ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдкрд╛рдИ рдЧрдИ: рдЧрд╛рдИрдб рдпреВрдЯрд┐рд▓ рдФрд░ рдиреНрдпреВрдЧреНрдпреВрдб ред

public class GuidUtil {
  ...
  public static GuidInfo parseLine(...) {
    ...
    long[] data = new long[4];
    ...
    if (isOK(data)) {
      if (!hasVersion) {
        return new GuidInfo(guidString, name, guidType);
      }
      return new VersionedGuidInfo(guidString, version, name, guidType);
    }
    return null;
  }
  ...
  private static boolean isOK(long[] data) {
    for (int i = 0; i < data.length; i++) {
      if ((data[i] != 0) || (data[i] != 0xFFFFFFFFL)) { // <=
        return true;
      }
    }
    return false;
  }
  ...
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V6007 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдбреЗрдЯрд╛ [i]! = 0xFFFFFFFFFFL' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИред GuidUtil.java:200 рдХреЗ рд▓рд┐рдП

рдХреА рдкрд╛рд╢ isOK рд╡рд┐рдзрд┐ рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ GUID рдХреЛ рддреБрд░рдВрдд рдорд╛рдиреНрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдпрджрд┐ рдбреЗрдЯрд╛ рд╕рд░рдгреА рдЦрд╛рд▓реА рд╣реИ, рддреЛ GUID рдХреЗрд╡рд▓ рдЕрдорд╛рдиреНрдп рд╣реЛрдЧрд╛ , рдФрд░ рдРрд╕рд╛ рдХрднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░ рдХрд╛ рдорд╛рди рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдкрд╛рд░реНрд╕рд▓реАрди рд╡рд┐рдзрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ ред IsOK рд╡рд┐рдзрд┐ рд╢рд░реАрд░

рджреЛрдиреЛрдВ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЧрд▓рдд рдХреЛрдб рдХреЗ рдПрдХ рдФрд░ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИред рд▓реЗрдЦрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдорд╛рди рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рддрдп рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП:

private static boolean isOK(long[] data) {
  for (int i = 0; i < data.length; i++) {
    if ((data[i] == 0) || (data[i] == 0xFFFFFFFFL)) {
      return false;
    }
  }
  return true;
}

рдЦрдВрдб 2: рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рддреЗ рд╣реБрдП


public void putByte(long offsetInMemBlock, byte b)
throws MemoryAccessException, IOException {
  long offsetInSubBlock = offsetInMemBlock - subBlockOffset;
  try {
    if (ioPending) {
      new MemoryAccessException("Cyclic Access"); // <=
    }
    ioPending = true;
    doPutByte(mappedAddress.addNoWrap(offsetInSubBlock / 8),
              (int) (offsetInSubBlock % 8), b);
  }
  catch (AddressOverflowException e) {
    new MemoryAccessException("No memory at address"); // <=
  }
  finally {
    ioPending = false;
  }
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V6006 рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред 'рдереНрд░реЛ' рдХреАрд╡рд░реНрдб рдЧрд╛рдпрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: 'рдирдпрд╛ рдореЗрдореЛрд░реАрдЕрд╕реЗрдХреНрд╕реНрдЯрд╕реЗрдкреНрд╢рди ("рд╕рд╛рдЗрдХреНрд▓рд┐рдХ рдПрдХреНрд╕реЗрд╕")'ред BitMappedSubMemoryBlock.java:99

рдЕрдкрд╡рд╛рдж рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╕реНрд╡рдпрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)ред рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛, рдЙрдирдХреЗ рдирдП рдЙрджрд╛рд╣рд░рдг рдлреЗрдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЗрдВрдХ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ , рдХреБрдЫ рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ - рдХрд╣реАрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдпрд╛ рд╢рд╛рдпрдж рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ред

рдЗрд╕ рд╡рд┐рдзрд┐ рд╕реЗ рдпреБрдХреНрдд рд╡рд░реНрдЧ рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХ рдкрд░ рдПрдХ рдЖрд╡рд░рдг рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣рд╛рдВ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХреЗ рдЧрдП рд╣реИрдВ, рд╡рд░реНрддрдорд╛рди рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХ рдореЗрдВ ioPending рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдкрд╣реБрдВрдЪ рдХреЗ рд▓рдЧрд╛рдП рдЧрдП рдкреНрд░рддрд┐рдмрдВрдз рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИрдФрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ AddressOverflowException рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдбреЗрдЯрд╛ рдХреЛ рдЪреБрдкрдЪрд╛рдк рджреВрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд╛рди рдкрд░ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЕрдЬреАрдм рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреА рдЬрд┐рдиреНрд╣реЗрдВ рдбреАрдмрдЧрд░ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред

рдЗрдирдореЗрдВ рд╕реЗ рдЖрда рд╣рд╛рд░реЗ рд╣реБрдП рдЕрдкрд╡рд╛рдж рдереЗ:

  • BitMappedSubMemoryBlock.java: рд▓рд╛рдЗрдиреЗрдВ 77, 99, 106, 122
  • рдмрд╛рдЗрдЯрдореЗрдкреНрдбрд╕реБрдмрдореЛрд░реАрдмреНрд▓реЙрдХ.рдЬрд╡рд╛: рд▓рд╛рдЗрдиреЗрдВ 52, 73, 92, 114

рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЕрддреНрдпрдВрдд рд╕рдорд╛рди рддрд░реАрдХреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдлреЗрдВрдХ рдореМрдЬреВрдж рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдПрдХ рд╡рд┐рдзрд┐ рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрдкрд░реЛрдХреНрдд рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рдорд╛рди рд▓рд┐рдЦреА рдЧрдИ рдереА, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХрд┐рд╕реА рддрд░рд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рдФрд░ рдЗрд╕реЗ рдЙрди рдЬрдЧрд╣реЛрдВ рдкрд░ рд╕рд╣реА рдХрд░ рджрд┐рдпрд╛ рдЬреЛ рд╡реЗ рдпрд╛рдж рд░рдЦ рд╕рдХрддреЗ рдереЗред

рдЦрдВрдб 3: рдЦрджрд╛рди


private void processSelection(OptionsTreeNode selectedNode) {
  if (selectedNode == null) {
    setViewPanel(defaultPanel, selectedNode); // <=
    return;
  }
  ...
}
private void setViewPanel(JComponent component, OptionsTreeNode selectedNode) {
  ...
  setHelpLocation(component, selectedNode);
  ...
}
private void setHelpLocation(JComponent component, OptionsTreeNode node) {
  Options options = node.getOptions();
  ...
}

PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V6008 рд╕рдорд╛рд░реЛрд╣ 'setViewPanel' рдореЗрдВ 'рдЪрдпрдирд┐рддNode' рдХреЗ рд╢реВрдиреНрдп рд╣рд╕реНрддрдХреНрд╖реЗрдкред OptionsPanel.java:266

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдереЛрдбрд╝рд╛ рдЭреВрда рдмреЛрд▓рд╛ - рдлрд┐рд▓рд╣рд╛рд▓, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рд╡рд┐рдзрд┐ NullPointerException рдХреЛ рд▓реАрдб рдирд╣реАрдВ рдХрд░рддреА рд╣реИ , рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЗрд╡рд▓ рджреЛ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЪрдпрдирд┐рдд рдиреЛрдб рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд▓ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ ред рдпрд╣ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░ рдпрд╣ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрдпрдирд┐рдд рдХреЗрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рддреА рд╣реИ == рдЕрд╢рдХреНрдд рд╣реИ , рдФрд░ рдпрд╣ рддрдп рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╡реИрдз рдореВрд▓реНрдп рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрд╡реЗрджрди рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрд╢реНрдЪрд░реНрдп рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЦреБрд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЦрддрд░рдирд╛рдХ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЬреЛ рд▓реЛрдЧ рдХреЛрдб рдЖрдзрд╛рд░ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдирдореЗрдВ рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЪрдпрди рд╡рд┐рдзрд┐ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рддреНрд░реБрдЯрд┐ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рд╣реА рд╢рд░реАрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд▓реЙрдХ рджреЛ рдмрд╛рд░ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдм рддрдХ, рдЪрдпрдирд┐рдд рдиреЛрдб рдЕрдм рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ , рдФрд░ setViewPanel-setHelpLocation рдХреЙрд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо NullPointerException рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ ред

рдЯреБрдХрдбрд╝рд╛ 4: рдмреБрд░рд╛рдИ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдд: рдкреВрд░реНрдг


public static final int[] UNSUPPORTED_OPCODES_LIST = { ... };
public static final Set<Integer> UNSUPPORTED_OPCODES = new HashSet<>();

static {
  for (int opcode : UNSUPPORTED_OPCODES) {
    UNSUPPORTED_OPCODES.add(opcode);
  }
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V6053 рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрдмрдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЬрд╛рд░реА рд╣реИред ConcurrentModificationException рд╣реЛ рд╕рдХрддреА рд╣реИред DWARFExpressionOpCodes.java:205

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдлрд┐рд░ рд╕реЗ рдереЛрдбрд╝рд╛ рдЭреВрда рдмреЛрд▓рд╛ - рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ UNSUPPORTED_OPCODES рд╕рдВрдЧреНрд░рд╣ рд╣рдореЗрд╢рд╛ рдЦрд╛рд▓реА рд╣реИ рдФрд░ рд▓реВрдк рдмрд╕ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдПрдХ рднреАрдбрд╝ рд╣реИ, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЗрд╕рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд▓реЗрдЦрдХ рдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛рдСрдЯреЛ-рдкреВрд░реНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдирд╛рдо рдФрд░ рдпрд╣ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдХрд┐ рдЧрд▓рдд рдХреНрд╖реЗрддреНрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрд╕ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рджреМрд░рд╛рди рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рд╕рдВрд╢реЛрдзрди рдЕрд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫреА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрд╡реЗрджрди рдЧрд┐рд░ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ, рдЗрд╕ рдЯрд╛рдЗрдкреЛ рдХрд╛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рднрд╛рд╡ рд╣реИ: DWARF рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдорд╢реАрди рдЕрд╕рдорд░реНрдерд┐рдд рдСрдкрдХреЛрдб рдЦреЛрдЬрдиреЗ рдкрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдВрдЧреНрд░рд╣ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред

рдЬрд╛рд╡рд╛ 9 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рдпрд╣ рдирд┐рд░рдВрддрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдлрд╝реИрдХреНрдЯрд░реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЗрдЯ.рдСрдлрд╝ (рдЯреА ... рддрддреНрд╡) рди рдХреЗрд╡рд▓ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдмрд▓реНрдХрд┐ рддреБрд░рдВрдд рдмрдирд╛рдП рдЧрдП рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рднреА рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреЛрдб рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред

рдЯреБрдХрдбрд╝рд╛ 5: рд╡рд╣рд╛рдБ рд╕рдм рдХреБрдЫ рд╣реИ


public void setValueAt(Object aValue, int row, int column) {
  ...
  int index = indexOf(newName);
  if (index >= 0) {                  // <=
    Window window = tool.getActiveWindow();
    Msg.showInfo(getClass(), window, "Duplicate Name",
                 "Name already exists: " + newName);
    return;
  }

  ExternalPath path = paths.get(row); // <=
  ...
}
private int indexOf(String name) {
  for (int i = 0; i < paths.size(); i++) {
    ExternalPath path = paths.get(i);
    if (path.getName().equals(name)) {
      return i;
    }
  }
  return 0;
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:

  • V6007 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рд╕реВрдЪрдХрд╛рдВрдХ> = 0' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИред ExternalNamesTableModel.java:105
  • V6019 Unreachable code detected. It is possible that an error is present. ExternalNamesTableModel.java:109

рд▓реЗрдЦрдХ рдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдФрд░ рдПрдХ рдЕрдирд┐рд░реНрдзрд╛рд░рд┐рдд рдореВрд▓реНрдп рд░рд┐рдЯрд░реНрди рдХреЗ рд▓рд┐рдП "рдЗрдВрдбреЗрдХреНрд╕" -1 рдХреЗ рдмрдЬрд╛рдп рдЗрдВрдбреЗрдХреНрд╕рдСрдл рдкрджреНрдзрддрд┐ рдореЗрдВ - рдкрде рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ ред рднрд▓реЗ рд╣реА рд╕рдВрдЧреНрд░рд╣ рдЦрд╛рд▓реА рд╣реЛред рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдЙрддреНрдкрдиреНрди рдХреА рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХреЛ рдмрджрд▓рдирд╛ рднреВрд▓ рдЧрдпрд╛ред рдирддреАрдЬрддрди, setValueAt рд╡рд┐рдзрд┐ рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рд╕реА рднреА рдореВрд▓реНрдп рдХреЛ рддреНрдпрд╛рдЧ рджреЗрдЧреА рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ "рдирд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ" рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧреА , рднрд▓реЗ рд╣реА рдХреЛрдИ рдореМрдЬреВрджрд╛ рдирд╛рдо рди рд╣реЛред

рд╡реИрд╕реЗ, рдЗрдВрдбреЗрдХреНрд╕рдСрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣реАрдВ рдФрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдХреЗрд╡рд▓ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЖрдк рдЬрд┐рд╕ рддрддреНрд╡ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╢рд╛рдпрдж, рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдХреЗ рдмрдЬрд╛рдп, setValueAt рдореЗрдВ рд╕реАрдзреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗрдВ рдФрд░ рд╡рд╛рдкрд╕реА рдХрд░реЗрдВрдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдорд┐рд▓рд╛рди рдЖрдЗрдЯрдо рдкрд░ред

рдиреЛрдЯ: рдореИрдВ рдХрдерд┐рдд рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред SetValueAt рд╡рд┐рдзрд┐ рд╢рд╛рдпрдж рдЕрдм рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ рдпрд╛ рдХреЗрд╡рд▓ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд рдХреЙрд▓ рдХреА рдЬрд╛рддреА рд╣реИред

рдЦрдВрдб 6: рдореМрди рд░рдЦреЗрдВ


final static Map<Character, String> DELIMITER_NAME_MAP = new HashMap<>(20);
// Any non-alphanumeric char can be used as a delimiter.
static {
  DELIMITER_NAME_MAP.put(' ', "Space");
  DELIMITER_NAME_MAP.put('~', "Tilde");
  DELIMITER_NAME_MAP.put('`', "Back quote");
  DELIMITER_NAME_MAP.put('@', "Exclamation point");
  DELIMITER_NAME_MAP.put('@', "At sign");
  DELIMITER_NAME_MAP.put('#', "Pound sign");
  DELIMITER_NAME_MAP.put('$', "Dollar sign");
  DELIMITER_NAME_MAP.put('%', "Percent sign");
  ...
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V6033 рд╕рдорд╛рди рдХреБрдВрдЬреА '@' рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдЗрдЯрдо рдкрд╣рд▓реЗ рд╣реА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред FilterOptions.java:45

Ghidra рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд╛рдо рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╕рд╛рде рдХрдИ рдХреАрд╡рд░реНрдбреНрд╕ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: '.java, .c' рдЬрдм 'OR' рдореЛрдб рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЙрди рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдирдХреЗ рдирд╛рдо рдореЗрдВ '.java' рдпрд╛ '.c' рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рдмреНрдж рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рднрд╛рдЬрдХ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рд╕реНрдордпрд╛рджрд┐рдмреЛрдзрдХ рдЪрд┐рд╣реНрди рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рдерд╛ред

рдЗрд╕ рддрд░рд╣ рдХреЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╢реАрдЯ рдореЗрдВ, рд╕реАрд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдХреНрд╕рд░ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рдЖрдк рдРрд╕реЗ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреА рдЖрдБрдЦреЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдзреБрдВрдзрд▓рд╛ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рдФрд░ рдЕрдЧрд░ рдЯрд╛рдЗрдкреЛ рджреЛ рдЖрд╕рдиреНрди рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдирд╣реАрдВ рдерд╛, рддреЛ рд╣рд╛рде рд╕реЗ рдпрд╣ рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЛрдИ рдирд╣реАрдВ рджреЗрдЦреЗрдЧрд╛ред

рдЦрдВрдб 7: рд╡рд┐рднрд╛рдЬрди рдХрд╛ рд╢реЗрд╖ рднрд╛рдЧ рд╣рдореЗрд╢рд╛ 0 рд╣реЛрддрд╛ рд╣реИ


void setFactorys(FieldFactory[] fieldFactorys,
                 DataFormatModel dataModel, int margin) {
  factorys = new FieldFactory[fieldFactorys.length];

  int x = margin;
  int defaultGroupSizeSpace = 1;
  for (int i = 0; i < factorys.length; i++) {
    factorys[i] = fieldFactorys[i];
    factorys[i].setStartX(x);
    x += factorys[i].getWidth();
    // add in space between groups
    if (((i + 1) % defaultGroupSizeSpace) == 0) { // <=
      x += margin * dataModel.getUnitDelimiterSize();
    }
  }
  width = x - margin * dataModel.getUnitDelimiterSize() + margin;
  layoutChanged();
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:

  • V6007 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ '((i + 1)% defaultGroupSizeSpace) == 0' рд╣рдореЗрд╢рд╛ рд╕рддреНрдп рд╣реЛрддрд╛ рд╣реИред ByteViewerLayoutModel.java:66
  • V6048 рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдСрдкрд░реЗрд╢рди рдореЗрдВ 'рдбрд┐рдлреЙрд▓реНрдЯрдЧреНрд░реБрдкрд╕рд╛рдЗрдЬрд╕реНрдкреЗрд╕' рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред ByteViewerLayoutModel.java:66

рд╣реЗрдХреНрд╕ рдмрд╛рдЗрдЯ рджрд░реНрд╢рдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╕рдореВрд╣реЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдкрд╕рдВрдж рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЖрдЙрдЯрдкреБрдЯ рдХреЛ 'ffff ffff' рдпрд╛ 'ff ff ff ff' рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЗрди рд╕рдореВрд╣реЛрдВ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП setFactorys рд╡рд┐рдзрд┐ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ ред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЕрдиреБрдХреВрд▓рди рдФрд░ рдкреНрд░рджрд░реНрд╢рди рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдЪрдХреНрд░ рдмреЗрд╣рдж рд╕рдВрджрд┐рдЧреНрдз рджрд┐рдЦрддрд╛ рд╣реИ: рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рд╡рд┐рднрд╛рдЬрди рд╢реЗрд╖ рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ x рд╕рдордиреНрд╡рдп рдмрдврд╝реЗрдЧрд╛ред рд╕рдВрджреЗрд╣ DataModel рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдЧреБрдг рдФрд░ рдЙрдкрд▓рдмреНрдзрддрд╛ рд╕рдореВрд╣ рдЬреЛрдбрд╝рддрд╛ рд╣реИ ред

рд░реЗрдХреНрдЯреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдмрдЪрд╛ рдХрдЪрд░рд╛? рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ defaultGroupSizeSpace рдЪрд░ рдЧрдгрдирд╛ рдЦреЛ рдЧрдП рдереЗ? рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЗрд╕рдХреЗ рдорд╛рди рдХреЛ dataModel.getGroupSize () рд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдиреЗ рд▓реЗрдЖрдЙрдЯ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛, рдФрд░ рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рдЗрд╕ рдХреЛрдб рдХрд╛ рд▓реЗрдЦрдХ рд╣реА рдЕрд╕рдВрджрд┐рдЧреНрдз рдЙрддреНрддрд░ рджреЗ рд╕рдХрддрд╛ рд╣реИред

рдЯреБрдХрдбрд╝рд╛ 8: рдЯреВрдЯрд╛ рд╣реБрдЖ рд╕рддреНрдпрд╛рдкрди, рднрд╛рдЧ 2


private String parseArrayDimensions(String datatype,
                                    List<Integer> arrayDimensions) {
  String dataTypeName = datatype;
  boolean zeroLengthArray = false;
  while (dataTypeName.endsWith("]")) {
    if (zeroLengthArray) {                   // <=
      return null; // only last dimension may be 0
    }
    int rBracketPos = dataTypeName.lastIndexOf(']');
    int lBracketPos = dataTypeName.lastIndexOf('[');
    if (lBracketPos < 0) {
      return null;
    }
    int dimension;
    try {
      dimension = Integer.parseInt(dataTypeName.substring(lBracketPos + 1,
                                                          rBracketPos));
      if (dimension < 0) {
        return null; // invalid dimension
      }
    }
    catch (NumberFormatException e) {
      return null;
    }
    dataTypeName = dataTypeName.substring(0, lBracketPos).trim();
    arrayDimensions.add(dimension);
  }
  return dataTypeName;
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V6007 рдПрдХреНрд╕рдкреНрд░реЗрд╢рди 'рдЬреАрд░реЛрд▓реЛрдиреНрд╕реНрдЯреНрд░реЗрд╢рди рдПрд░реЗ' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИред PdbDataTypeParser.java:278

рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдмрд╣реБрдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреЗ рдЖрдпрд╛рдо рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреА рд╣реИ рдФрд░ рдЕрдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕ рдпрд╛ рд░рд┐рдХреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╢реЗрд╖ рдкрд╛рда рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреА рд╣реИ ред рд╕рддреНрдпрд╛рдкрди рдЬрд╛рдВрдЪ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдкрдврд╝рд╛ рдЧрдпрд╛ рдЖрдХрд╛рд░ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдг рджрд╛рдПрдВ рд╕реЗ рдмрд╛рдПрдВ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ '[0] [1] [2]' рдПрдХ рдорд╛рдиреНрдп рдЗрдирдкреБрдЯ рдЯреЗрдХреНрд╕реНрдЯ рд╣реИ, рдФрд░ '[2] [1] [0]' рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди, рдкрд░реЗрд╢рд╛рдиреА: рдХрд┐рд╕реА рдиреЗ рдЪреЗрдХ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдХрд┐ рдЕрдЧрд▓рд╛ рдЖрдХрд╛рд░ рд╢реВрдиреНрдп рд╣реИ, рдФрд░ рдкрд╛рд░реНрд╕рд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЕрдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдЦрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЛ рд╕рдВрднрд╡рддрдГ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

try {
  dimension = Integer.parseInt(dataTypeName.substring(lBracketPos + 1,
                                                      rBracketPos));
  if (dimension < 0) {
    return null; // invalid dimension
  } else if (dimension == 0) {
    zeroLengthArray = true;
  }
}
catch (NumberFormatException e) {
  return null;
}

рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕ рдмрд╛рдд рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╕рдордп рдХреЗ рд╕рд╛рде рд╡реИрдзрддрд╛ рдХрд╛ рдпрд╣ рдорд╛рдирджрдВрдб рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рд▓реЗрдЦрдХ рдХреА рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдЕрд░реНрде рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рдЖрдпрд╛рдо рдкрдврд╝рдиреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХрд┐рд╕реА рднреА рдЖрд╡реЗрджрди рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдкреВрд░реА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЗ рд╕рд╛рде рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрд╛рдлреА рд╣рд╛рдирд┐рд░рд╣рд┐рдд рдХреНрд░реИрд╢ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕реБрд░рдХреНрд╖рд╛ рдЫреЗрдж, рдбреЗрдЯрд╛ рд░рд┐рд╕рд╛рд╡, рдбреЗрдЯрд╛ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рдпрд╛ рд╣рд╛рдирд┐ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХреНрд╡реЗрд░реА рд╕рддреНрдпрд╛рдкрди рдХреЗ рджреМрд░рд╛рди SQL рдЗрдВрдЬреЗрдХреНрд╢рди рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ)ред

рдмрд╛рдХреА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛


рдкрд╛рдардХ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рдХреБрдЫ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрд░реАрдиреЗ рд╕реЗ рдмрдВрдзреЗ рд╣реБрдП рдХреНрд▓реЛрдХ рдХреЛ рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреА рд▓рдЧрднрдЧ 1.25 рдорд┐рд▓рд┐рдпрди рд▓рд╛рдЗрдиреЗрдВ (рдЦрд╛рд▓реА рдирд╣реАрдВ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ) рдЧрд┐рдирд╛ рдЧрдпрд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд▓рдЧрднрдЧ рд╕рднреА рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдмреЗрд╣рдж рд╕рдорд╛рди рд╣реИрдВ: рдпрд╣рд╛рдВ рд╡реЗ рд╢реВрдиреНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рднреВрд▓ рдЧрдП , рдЙрдиреНрд╣реЛрдВрдиреЗ рд╡рд╣рд╛рдВ рдЕрдкреНрд░рдпреБрдХреНрдд рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдб рдХреЛ рдирд╣реАрдВ рд╣рдЯрд╛рдпрд╛ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдХреЗ рдкрд╛рдардХ рдХреЛ рдмреЛрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдФрд░ рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрддрд╛рдпрд╛ред

рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдкрдЪрд╛рд╕ рдЪреЗрддрд╛рд╡рдиреА "рд╣реИ V6009 рдХреЗ рдЧрд▓рдд рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдорд╛рд░реЛрд╣ рдПрдХ рдЕрдЬреАрдм рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ" рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐(CParserUtils.java:280, ComplexName.java:48 рдФрд░ рдЕрдиреНрдп) рдХрд┐рд╕реА рднреА рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рдмрд╛рдж рдмрд╛рдХреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдХреНрд╕рд░ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд┐рднрд╛рдЬрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣ рднреВрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдЕрдиреНрдпрдерд╛ indexOf -1 рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрд▓рдд рдореВрд▓реНрдп рд╣реИ ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдбреЗрдЯрд╛ рдХреЛ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рдмрд╛рд╣рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЖрд╡реЗрджрди рдХреЗ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛рдлреА рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЦрддрд░рдирд╛рдХ рд╕реНрдерд╛рди рд╣реИрдВ рдЬрд┐рдирд╕реЗ рд╣рдо рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдирд┐рд╖реНрдХрд░реНрд╖


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЧрд┐рджрд░рд╛ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рд╕реЗ рдкреНрд░рд╕рдиреНрди рд╣реЛрддрд╛ рд╣реИ - рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдмреБрд░реЗ рд╕рдкрдиреЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдХреЛрдб рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд░реВрдкрд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдХреА рдПрдХ рдмрд╣реБрдд рд╕реБрд╕рдВрдЧрдд рд╢реИрд▓реА рд╣реИ: рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЪрд░, рд╡рд┐рдзрд┐рдпрд╛рдВ, рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдирд╛рдо рджрд┐рдП рдЧрдП рд╣реИрдВ, рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИрдВ, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдореМрдЬреВрдж рд╣реИрдВред

рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА:

  • рдореГрдд рдХреЛрдб, рдЬреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдХрдИ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдмрдиреЗ рд░рд╣реЗ;
  • рдХрдИ javadocs рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рд╣реИрдВ рдФрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреИрд░-рдореМрдЬреВрдж рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ;
  • IntelliJ IDEA рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рдХрд╛рд╕ рдХреА рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ ;
  • рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдЖрд╕рдкрд╛рд╕ рдирд┐рд░реНрдорд┐рдд рдПрдХ рдореЙрдбреНрдпреВрд▓рд░ рдкреНрд░рдгрд╛рд▓реА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдирд╛ рдФрд░ рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдХрдард┐рди рдмрдирд╛ рджреЗрддреА рд╣реИред

рдХреГрдкрдпрд╛ рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рди рдХрд░реЗрдВред рд╕реАрдЯ рдмреЗрд▓реНрдЯ рдХреА рддрд░рд╣ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рдПрдХ рд░рд╛рдордмрд╛рдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд░рд┐рд▓реАрдЬ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдЖрдкрджрд╛рдУрдВ рдХреЛ рд░реЛрдХрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдФрд░ рдХреЛрдИ рднреА рд▓реЙрдЧ-рдЗрди рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЖрдк рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рдЕрдиреНрдп рд╕рд┐рджреНрдз рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд╛рдЗрд╕реЗрдВрд╕ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдк рднреА рд╣реИрдВ ред



рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдирд┐рдХрд┐рддрд╛ рд▓рдЬреЗрдмрд╛ред NSA, Ghidra, рдФрд░ Unicorns ред

All Articles