S3655 — Empty nullable value should not be accessed

Language
VB.NET
Type
Bug
Severity
Major
Tags
cwe, symbolic-execution

Why is this an issue?

Nullable value types can hold either a value or Nothing.

The value stored in the nullable type can be accessed with the Value property or by casting it to the underlying type. Still, both operations throw an InvalidOperationException when the value is Nothing. A nullable type should always be tested before accessing the value to avoid raising exceptions.

How to fix it

Code examples

Noncompliant code example


Sub Sample(condition As Boolean)
    Dim nullableValue As Integer? = If(condition, 42, Nothing)
    Console.WriteLine(nullableValue.Value)             ' Noncompliant: InvalidOperationException is raised

    Dim nullableCast As Integer? = If(condition, 42, Nothing)
    Console.WriteLine(CType(nullableCast, Integer))    ' Noncompliant: InvalidOperationException is raised
End Sub

Compliant solution


Sub Sample(condition As Boolean)
    Dim nullableValue As Integer? = If(condition, 42, Nothing)
    If nullableValue.HasValue Then
        Console.WriteLine(nullableValue.Value)
    End If

    Dim nullableCast As Integer? = If(condition, 42, Nothing)
    If nullableCast.HasValue Then
        Console.WriteLine(CType(nullableCast, Integer))
    End If
End Sub

Resources

Documentation

↑ Back to top