Skip to content

Commit e1d38d6

Browse files
authored
Merge pull request #106 from chrisr3d/master
Fixed STIX 2.0 Pattern grammar
2 parents 8236c62 + dc9acd4 commit e1d38d6

File tree

7 files changed

+435
-484
lines changed

7 files changed

+435
-484
lines changed

scripts/regenerate_grammars.sh

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@
1717
# The script will:
1818
# 1. Download ANTLR 4.13.2 JAR to /tmp if not present
1919
# 2. Clone/update the grammar source repository
20-
# 3. Regenerate parser files for all three grammar locations
21-
# 4. Clean up generated .interp and .tokens files
20+
# 3. Create a STIX 2.0 grammar variant (without EXISTS operator)
21+
# 4. Regenerate parser files for all three grammar locations
22+
# 5. Clean up generated .interp and .tokens files
2223

2324
set -e
2425

@@ -32,13 +33,6 @@ GRAMMAR_FILE="pattern_grammar/STIXPattern.g4"
3233
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
3334
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
3435

35-
# Output directories
36-
OUTPUT_DIRS=(
37-
"${PROJECT_ROOT}/stix2patterns/grammars"
38-
"${PROJECT_ROOT}/stix2patterns/v20/grammars"
39-
"${PROJECT_ROOT}/stix2patterns/v21/grammars"
40-
)
41-
4236
echo "=== STIX Pattern Validator Grammar Regeneration Script ==="
4337
echo ""
4438

@@ -81,20 +75,38 @@ fi
8175

8276
echo "Using grammar file: ${GRAMMAR_DIR}/${GRAMMAR_FILE}"
8377

84-
# Regenerate parser files for each output directory
78+
# Create STIX 2.0 grammar variant (without EXISTS operator, which is v2.1 only)
79+
V20_GRAMMAR_DIR="/tmp/stix2-v20-grammar"
80+
mkdir -p "$V20_GRAMMAR_DIR"
81+
sed -e '/| NOT? EXISTS objectPath/d' \
82+
-e "/^EXISTS: 'EXISTS' ;$/d" \
83+
"${GRAMMAR_DIR}/${GRAMMAR_FILE}" > "${V20_GRAMMAR_DIR}/STIXPattern.g4"
84+
echo "Created STIX 2.0 grammar variant (without EXISTS operator)"
85+
86+
# Regenerate parser files
8587
echo ""
8688
echo "Regenerating parser files..."
87-
cd "${GRAMMAR_DIR}/pattern_grammar"
8889

89-
for OUTPUT_DIR in "${OUTPUT_DIRS[@]}"; do
90-
echo " -> ${OUTPUT_DIR}"
90+
# v2.1 grammar (full, with EXISTS) for generic and v21 directories
91+
cd "${GRAMMAR_DIR}/pattern_grammar"
92+
for OUTPUT_DIR in "${PROJECT_ROOT}/stix2patterns/grammars" "${PROJECT_ROOT}/stix2patterns/v21/grammars"; do
93+
echo " -> ${OUTPUT_DIR} (v2.1 grammar)"
9194
java -jar "$ANTLR_JAR" \
9295
-Dlanguage=Python3 \
9396
STIXPattern.g4 \
9497
-visitor \
9598
-o "$OUTPUT_DIR"
9699
done
97100

101+
# v2.0 grammar (without EXISTS) for v20 directory
102+
cd "$V20_GRAMMAR_DIR"
103+
echo " -> ${PROJECT_ROOT}/stix2patterns/v20/grammars (v2.0 grammar)"
104+
java -jar "$ANTLR_JAR" \
105+
-Dlanguage=Python3 \
106+
STIXPattern.g4 \
107+
-visitor \
108+
-o "${PROJECT_ROOT}/stix2patterns/v20/grammars"
109+
98110
# Clean up generated artifacts (not needed for Python runtime)
99111
echo ""
100112
echo "Cleaning up ANTLR artifacts..."
@@ -104,7 +116,7 @@ find "$PROJECT_ROOT/stix2patterns" -name "*.tokens" -delete
104116
# Verify generated files
105117
echo ""
106118
echo "Verifying generated files..."
107-
for OUTPUT_DIR in "${OUTPUT_DIRS[@]}"; do
119+
for OUTPUT_DIR in "${PROJECT_ROOT}/stix2patterns/grammars" "${PROJECT_ROOT}/stix2patterns/v20/grammars" "${PROJECT_ROOT}/stix2patterns/v21/grammars"; do
108120
if [ -f "${OUTPUT_DIR}/STIXPatternParser.py" ]; then
109121
VERSION=$(head -1 "${OUTPUT_DIR}/STIXPatternParser.py" | grep -o "ANTLR [0-9.]*" || echo "unknown")
110122
echo " ${OUTPUT_DIR}: $VERSION"
@@ -114,6 +126,14 @@ for OUTPUT_DIR in "${OUTPUT_DIRS[@]}"; do
114126
fi
115127
done
116128

129+
# Verify EXISTS is not in v20 grammar
130+
if grep -q "EXISTS" "${PROJECT_ROOT}/stix2patterns/v20/grammars/STIXPatternLexer.py"; then
131+
echo " ERROR: EXISTS found in v20 grammar! This should not happen."
132+
exit 1
133+
else
134+
echo " Verified: EXISTS not present in v20 grammar"
135+
fi
136+
117137
echo ""
118138
echo "=== Grammar regeneration complete! ==="
119139
echo ""

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[bumpversion]
2-
current_version = 2.1.1
2+
current_version = 2.1.2
33
commit = True
44
tag = True
55

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
setup(
2929
name='stix2-patterns',
30-
version='2.1.1',
30+
version='2.1.2',
3131
description='Validate STIX 2 Patterns.',
3232
long_description=readme,
3333
long_description_content_type='text/x-rst',

0 commit comments

Comments
 (0)