Skip to content

Commit e2ecae2

Browse files
committed
first attempt to match wildcards
1 parent 7e0b83f commit e2ecae2

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

test/rules/peek_rules.yara

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ rule SyntaxExample
2828
filesize < 200MB
2929
#dstring == 8
3030
@dstring[1]
31+
$hex_*
3132
}
3233

3334
rule RuleReferenceExample

yara/src/extension.ts

+18-6
Original file line numberDiff line numberDiff line change
@@ -93,18 +93,30 @@ export class YaraReferenceProvider implements vscode.ReferenceProvider {
9393
let possibleVarRange: vscode.Range = new vscode.Range(possibleVarStart, range.end);
9494
let possibleVar: string = doc.getText(possibleVarRange);
9595
if (varFirstChar.has(possibleVar.charAt(0))) {
96-
// console.log(`Identified symbol as a variable: ${symbol}`);
97-
let lineNo = 0;
98-
lines.forEach(line => {
99-
let character: number = line.search(`[\$#@!]${symbol}[^a-zA-Z0-9_]`);
96+
let varRegexp: string;
97+
console.log(`Identified symbol as a variable: ${symbol}`);
98+
let possibleWildcardEnd: vscode.Position = new vscode.Position(range.end.line, range.end.character + 1);
99+
let possibleWildcardRange: vscode.Range = new vscode.Range(possibleVarStart, possibleWildcardEnd);
100+
let possibleWildcard: string = doc.getText(possibleWildcardRange);
101+
// treat like a wildcard
102+
if (possibleWildcard.slice(-1) == "*") {
103+
console.log(`possibleWildcard: ${JSON.stringify(possibleWildcard)}`);
104+
varRegexp = `[\$#@!]${symbol}[a-zA-Z0-9_]+`;
105+
}
106+
// treat like a normal variable reference
107+
else {
108+
varRegexp = `[\$#@!]${symbol}[^a-zA-Z0-9_]`;
109+
}
110+
for (let lineNo = 0; lineNo < lines.length; lineNo++) {
111+
let character: number = lines[lineNo].search(varRegexp);
100112
if (character != -1) {
101113
// console.log(`Found ${symbol} on line ${lineNo} at character ${character}`);
102114
// have to readjust the character index
103115
let refPosition: vscode.Position = new vscode.Position(lineNo, character + 1);
104116
references.push(new vscode.Location(fileUri, refPosition));
105117
}
106-
lineNo++;
107-
});
118+
119+
}
108120
}
109121
else {
110122
let lineNo = 0;

0 commit comments

Comments
 (0)