CS.PROP.LOCK

プロパティに set または get のいずれかがロックされている場合、両方をロックします。

この規則は、プロパティに get と set のメソッドがどちらもあって、次の条件のいずれかが満たされる場合に常にトリガーします。
  • 1 つのメソッドのみがロックを使用し、他方のメソッドは使用しません。
  • 両方ともロックを使用しますが、別のオブジェクトをロックします。

脆弱性とリスク

プロパティ内のメソッドの 1 つがロックを必要とする場合、他方のメソッドもロックを必要とする可能性が非常に高くなります。ロックしなければ、通常は指摘を再現することが容易ではないため、指摘の検出とデバッグが非常に困難になる可能性があります。

脆弱コード例

コピー
  //VIOLATION CASE
  public class Class1
  {
      private object a;
      private object DeadBolt = new object();
      public object SomeObject
      {
          get
          {
             lock (DeadBolt)
             {
                 return a;
             }
         }
         set
         {
             a = value;
         }
     }
 }

修正コード例

コピー
  //FIXED CASE
  public class Class1
  {
      private object a;
      private object DeadBolt = new object();
      public object SomeObject
      {
          get
          {
             lock (DeadBolt)
             {
                 return a;
             }
         }
         set
             {
             lock (DeadBolt)
             {
                 a = value;
             }
         }
     }
 }