﻿# V6009\. Function receives an odd argument\.

Анализатор обнаружил потенциально возможную ошибку, связанную с тем, что в качестве фактического аргумента в функцию передаётся очень странное значение\.

Рассмотрим примеры:

**Недопустимый индекс**

```cpp
String SomeMethod(String mask, char ch)
{
  String name = mask.substring(0, mask.indexOf(ch));
  ...
  return name;
}
```

IndexOf\(\) возращает позицию искомого аргумента\. Если аргумент не найден, то функция возвращает значение '\-1'\. А если передать отрицательный индекс в функцию substring\(\), то возникнет 'StringIndexOutOfBoundsException'\.

Корректный вариант:

```cpp
String SomeMethod(String mask, char ch)
{
  int pos = mask.indexOf(ch);
  if (pos < 0) return "error";

  String name = mask.substring(0, pos);
  ...
  return name;
}
```

**Null аргумент**

```cpp
String[] SplitFunc(String s, String d) {
  ...
  if (d == null) {
    return s.split(d);
  }
  return null;
}
```

По ряду причин была произведена некорректная проверка, из\-за чего в функцию split\(\) передается аргумент равный null\. В результате чего функция сгенерирует исключение 'NullPointerException'\.

 Корректный вариант:

```cpp
String[] SplitFunc(String s, String d) {
  ...
  if (d != null) {
    return s.split(d);
  }
  return null;
}
```

**Сравнение с самим собой**

```cpp
...
return obj.equals(obj);
```

Фрагмент кода возвращает результат сравнения некоторого объекта с самим собой\. Не странно ли? Скорее всего имело место сравнение с каким\-то другим объектом:

```cpp
...
return obj.equals(obj2);
```