# V3092. Range intersections are possible within conditional expressions.

The analyzer has detected a potential error in a condition. The program must perform different actions depending on which range of values a certain variable meets.

For this purpose, the following construct is used in the code:

    if ( MIN_A < X && X < MAX_A ) {
      ....
    } else if ( MIN_B < X && X < MAX_B ) {
      ....
    }

The analyzer generates the warning when the ranges checked in conditions overlap. For example:

    if ( 0 <= X && X < 10)
      FooA();
    else if ( 10 <= X && X < 20)
      FooB();
    else if ( 20 <= X && X < 300)
      FooC();
    else if ( 30 <= X && X < 40)
      FooD();

The code contains a typo. The programmer's fingers faltered at some moment and he wrote "20 <= X && X < 300" instead of "20 <= X && X < 30" by mistake. If the X variable stores, for example, the value 35, it will be the function FooC() that will be called instead of FooD().

The fixed code:

    if ( 0 <= X && X < 10)
      FooA();
    else if ( 10 <= X && X < 20)
      FooB();
    else if ( 20 <= X && X < 30)
      FooC();
    else if ( 30 <= X && X < 40)
      FooD();

This diagnostic is classified as:

CWE-670

You can look at examples of errors detected by the V3092 diagnostic.