Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Semgrep not finding two lines of code with a 'patterns' section

Tags:

c#

semgrep

I have a Semgrep rule:

rules:
  - id: create-chat-client
    patterns:
      - pattern: var $X = GrpcChannel.ForAddress(...); 
      - pattern: var $Y = new ChatService.ChatServiceClient($X);
    languages: 
      - csharp
    message: <pass>
    severity: INFO

And I am trying to match this code:

using Grpc.Net.Client;
using GrpcChat.ProtoBuf;

var channel = GrpcChannel.ForAddress("https://localhost:8888");
var client = new ChatService.ChatServiceClient(channel);

These match separately, but the 'patterns' should be a "AND" match and it fails. I must be missing something obvious. Anyone see anything?

like image 579
Shawn Wildermuth Avatar asked Sep 16 '25 03:09

Shawn Wildermuth


1 Answers

Using pattern-inside works:

rules:
  - id: chat
    patterns:
      - pattern-inside: |
          var $X = GrpcChannel.ForAddress(...); 
          ...
      - pattern: var $Y = new ChatService.ChatServiceClient($X);
    languages: 
      - csharp
    message: <pass>
    severity: INFO

with this test case:

using Grpc.Net.Client;
using GrpcChat.ProtoBuf;

var channel = GrpcChannel.ForAddress("https://localhost:8888");
// ruleid: chat
var client = new ChatService.ChatServiceClient(channel);

when I run a test:

% semgrep --test rules/
✓ All tests passed!
like image 165
bstpierre Avatar answered Sep 19 '25 10:09

bstpierre