metrica
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

Вебинар: Трудности при интеграции SAST, как с ними справляться - 04.04

>
>
>
Примеры ошибок, обнаруженных с помощью …

Примеры ошибок, обнаруженных с помощью диагностики V3020

V3020. An unconditional 'break/continue/return/goto' within a loop.


.NET Core Libraries (CoreFX)

V3020 An unconditional 'return' within a loop. Enumerable.cs 517


public override bool MoveNext()
{
  switch (state)
  {
    case 1:
      _enumerator = _source.GetEnumerator();
      state = 2;
      goto case 2;
    case 2:
      while (_enumerator.MoveNext())
      {
        current = _selector(_enumerator.Current);
        return true;
      }
      Dispose();
      break;
  }
  return false;
}

Similar errors can be found in some other places:

  • V3020 An unconditional 'return' within a loop. JsonDataContract.cs 128

Space Engineers

V3020 An unconditional 'continue' within a loop. Sandbox.Game MyRenderComponentThrust.cs 109


public override void Draw()
{
  ....
  foreach (var flame in m_thrust.Flames)
  {
     if (m_thrust.CubeGrid.Physics == null)
      continue;
    ....
    if (m_landingEffect != null)
    {
      m_landingEffect.Stop(true);
      m_landingEffect = null;
      --m_landingEffectCount;
    }
    continue;                    // <=
    ....
    if (m_landingEffect == null)
      continue;
    ....
  }
}

FlashDevelop

V3020 An unconditional 'break' within a loop. AirWizard.cs 1760


private void ExtensionBrowseButton_Click(....)
{
  ....
  foreach (var existingExtension in _extensions)
  {
    if (existingExtension.ExtensionId
      == extensionId) extension = existingExtension;
  break;
  }
  ....
}

Mono

V3020 An unconditional 'throw' within a loop. System.Data.Linq-net_4_x XmlMappingSource.cs 180


public void ReadEmptyContent(XmlReader r, string name)
{
  ....
  for (r.MoveToContent();
         r.NodeType != XmlNodeType.EndElement;
           r.MoveToContent())
  {
    if (r.NamespaceURI != DbmlNamespace)
      r.Skip();
    throw UnexpectedItemError(r); // <=
  }
  ....
}

Media Portal 2

V3020 An unconditional 'break' within a loop. XmlCacheProvider.cs 433


public TvdbSeries LoadSeriesFromCache(int seriesId)
{
  ....
  foreach (TvdbEpisode e in series.Episodes.Where(....))
  {
    if (epImageFile.Contains("thumb"))
      e.Banner.LoadThumb(Image.FromFile(epImageFile));
    else
      e.Banner.LoadBanner(Image.FromFile(epImageFile));
    break;
  }
  ....
}

Unity C# reference source code

V3020 CWE-670 An unconditional 'return' within a loop. PolygonCollider2DEditor.cs 96


private void HandleDragAndDrop(Rect targetRect)
{
  ....
  foreach (....)
  {
    ....
    if (....)
    {
      ....
    }
    return;
  }
  ....
}

Infer.NET

V3020 An unconditional 'break' within a loop. Compiler DefaultFactorManager.cs 474


private static Set<StochasticityPattern>
  IntersectPatterns(IEnumerable<StochasticityPattern> patterns)
{
  Set<StochasticityPattern> result = new Set<StochasticityPattern>();
  result.AddRange(patterns);
  bool changed;
  do
  {
    int count = result.Count;
    AddIntersections(result);
    changed = (result.Count != count);
    break;
  } while (changed);
  return result;
}

Similar errors can be found in some other places:

  • V3020 An unconditional 'break' within a loop. Visualizers.Windows FactorManagerView.cs 350

FastReport

V3020 An unconditional 'return' within a loop. CodeUtils.cs 262


public static string GetExpression(FindTextArgs args, bool skipStrings)
{
  while (args.StartIndex < args.Text.Length)
  {
    if (!FindMatchingBrackets(args, skipStrings))
      break;
    return args.FoundText;
  }
  return "";
}

Telerik UI for UWP

V3020 An unconditional 'break' within a loop. NodePool.cs 189


public IEnumerable<KeyValuePair<int, List<T>>> GetUnfrozenDisplayedElements()
{
  foreach (var item in this.generatedContainers)
  {
    foreach (var pair in item.Value)
    {
      if (!pair.IsFrozen)
      {
        yield return item;
      }
      break;
    }
  }
}

LINQ to DB

V3020 An unconditional 'return' within a loop. QueryRunner.cs 751


static T ExecuteElement<T>(
  Query          query,
  IDataContext   dataContext,
  Mapper<T>      mapper,
  Expression     expression,
  object?[]?     ps,
  object?[]?     preambles)
{
  using (var runner = dataContext.GetQueryRunner(query, 0, expression, ps,
    preambles))
  {
    using (var dr = runner.ExecuteReader())
    {
      while (dr.Read())
      {
        var value = mapper.Map(dataContext, runner, dr);
        runner.RowsCount++;
        return value;
      }
    }

    return Array<T>.Empty.First();
  }
}

Orleans

V3020 An unconditional 'return' within a loop. InMemoryTransportListenerFactory.cs 117


public async ValueTask<ConnectionContext> AcceptAsync(....)
{
  if (await _acceptQueue.Reader.WaitToReadAsync(....))
  {
    while (_acceptQueue.Reader.TryRead(out var item))
    {
      var remoteConnectionContext = item.Connection;
      var localConnectionContext = ....

      item.ConnectionAcceptedTcs.TrySetResult(true);

      return localConnectionContext;                      // <=
    }
  }

  return null;
}

Orleans

V3020 An unconditional 'return' within a loop. OrleansGeneratedCodeHelper.cs 99


public static TService UnwrapService<TService>(object caller, TService service)
{
  while (   service is IServiceHolder<TService>
         && caller is TService callerService)
  {
    return callerService;
  }
  ....
}

SanAndreasUnity

V3020 An unconditional 'break' within a loop. PlayerController.cs 258


private void OnDrawGizmosSelected()
{
  ....
  var vehicles = FindObjectsOfType<Vehicle>()
                .Where(....)
                .OrderBy(....)
                .ToArray();
  foreach (var vehicle in vehicles)
  {
    foreach (var seat in vehicle.Seats){....}
    var closestSeat = vehicle.GetSeatAlignmentOfClosestSeat(transform.position);
    if (closestSeat != Vehicle.SeatAlignment.None){....}
    break;
  }
}

SanAndreasUnity

V3020 An unconditional 'break' within a loop. LatencySimulation.cs 220


public override void ClientLateUpdate()
{
  while (reliableClientToServer.Count > 0)
  {
    QueuedMessage message = reliableClientToServer[0];
    if (message.time <= Time.unscaledTime)
    {
      wrap.ClientSend(new ArraySegment<byte>(message.bytes), Channels.Reliable);
      reliableClientToServer.RemoveAt(0);
    }
    break;
  }
  ....
}

nopCommerce

V3020 An unconditional 'return' within a loop. ConcurrentTrie.cs 230


protected virtual TrieNode GetOrAddNode(ReadOnlySpan<char> key,
                                        TValue value,
                                        bool overwrite = false)
{
  ....

  while (!node.IsDeleted && node.Children.TryGetValue(c, out nextNode))
  {
    var label = nextNode.Label.AsSpan();
    var i = GetCommonPrefixLength(label, suffix);

    // suffix starts with label?
    if (i == label.Length)
    {
      // if the keys are equal, the key has already been inserted
      if (i == suffix.Length)
      {
        if (overwrite)
          nextNode.SetValue(value);

        return nextNode;
      }

      // structure has changed since last; try again
      break;
    }

    ....

    return outNode;                                            // <=
  }

  ....
}