-
Notifications
You must be signed in to change notification settings - Fork 150
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
1.71b: better duplicate node detection, new report diff tool and child
signatures in report - Child signatures now exposed in the report, - Improvements to duplicate node detection, - sfscandiff tool added to compare reports.
- Loading branch information
Showing
9 changed files
with
175 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
#!/bin/bash | ||
|
||
echo "sfscandiff - skipfish scan result comparator (lcamtuf@google.com)" 1>&2 | ||
|
||
if [ ! "$#" = "2" ]; then | ||
echo "Usage: $0 /path/to/old/scan/ /path/to/new/scan/" 1>&2 | ||
exit 1 | ||
fi | ||
|
||
if [ ! -s "$1/summary.js" ]; then | ||
echo "ERROR: First parameter does not point to a valid skipfish scan directory." 1>&2 | ||
exit 1 | ||
fi | ||
|
||
if [ ! -s "$2/summary.js" ]; then | ||
echo "ERROR: Second parameter does not point to a valid skipfish scan directory." 1>&2 | ||
exit 1 | ||
fi | ||
|
||
OLD_SCAN="$1" | ||
NEW_SCAN="$2" | ||
|
||
# Takes two parameters: old scan subdir and new scan subdir | ||
|
||
function check_dir { | ||
|
||
# echo "Comparing: old=[$1] new=[$2]..." | ||
|
||
echo "0" >"$2/.diff_cnt" | ||
|
||
echo "var diff_data = {" >"$2/diff_data.js" | ||
|
||
grep "'dir':" "$2/child_index.js" | awk -F "'dir': " '{print $2}' | \ | ||
sed "s/,.*'sig'://" | sed "s/[,}]*$//" |sed "s/'//g" | \ | ||
while read -r dir sig; do | ||
|
||
# echo " Checking dir=[$dir] sig=[$sig]" | ||
|
||
# Find matching child node first. | ||
|
||
MATCH_DIR=`grep -E "'sig': $sig[, ]" "$1/child_index.js" 2>/dev/null | \ | ||
awk -F "'dir': " '{print $2}' | cut -d"'" -f2 | head -1` | ||
|
||
test "$MATCH_DIR" = "" && MATCH_DIR="not_found" | ||
|
||
# Recurse into children first, to get an accurate count of differences | ||
# for all descendants. | ||
|
||
check_dir "$1/$MATCH_DIR" "$2/$dir" | ||
|
||
# Read difference count from descendands. If node does not appear in | ||
# old scan, add 1 to the count. Store count. | ||
|
||
DIFF_CNT=`cat "$2/$dir/.diff_cnt" 2>/dev/null` | ||
test "$DIFF_CNT" = "" && DIFF_CNT=0 | ||
|
||
test "$MATCH_DIR" = "not_found" && DIFF_CNT=$[DIFF_CNT+1] | ||
|
||
echo " '$dir': $DIFF_CNT," >>"$2/diff_data.js" | ||
|
||
# Update total count for parent node ($2) | ||
|
||
TOTAL_DIFF_CNT=`cat "$2/.diff_cnt" 2>/dev/null` | ||
TOTAL_DIFF_CNT=$[TOTAL_DIFF_CNT+DIFF_CNT] | ||
echo "$TOTAL_DIFF_CNT" >"$2/.diff_cnt" | ||
|
||
done | ||
|
||
# Now, for every issue, see if a matching issue appears in old scan. | ||
# If not, add it to diff_data. | ||
|
||
grep "'severity':" "$2/issue_index.js" | while read -r line; do | ||
|
||
LOOK_FOR=`echo "$line" | awk -F"'fetched':" '{print $1}'` | ||
ISSUE_DIR=`echo "$line" | awk -F"'dir':" '{print $2}'|cut -d"'" -f2` | ||
|
||
# echo " Checking issue=[$ISSUE_DIR]" | ||
|
||
if ! grep -qF "$LOOK_FOR" "$1/issue_index.js" 2>/dev/null; then | ||
echo " '$ISSUE_DIR': 1," >>"$2/diff_data.js" | ||
fi | ||
|
||
done | ||
|
||
echo " '_eof': 0" >>"$2/diff_data.js" | ||
echo "};" >>"$2/diff_data.js" | ||
|
||
} | ||
|
||
echo -n "Finding new results in $NEW_SCAN... " | ||
|
||
check_dir "$OLD_SCAN" "$NEW_SCAN" | ||
|
||
TOTAL=`cat "$NEW_SCAN/.diff_cnt"` | ||
|
||
if [ "$TOTAL" = "0" ]; then | ||
echo "no new findings." | ||
elif [ "$TOTAL" = "1" ]; then | ||
echo "one new or modified node found." | ||
else | ||
echo "$TOTAL new or modified nodes found." | ||
fi | ||
|
||
grep -qF "var diff_mode" "$NEW_SCAN/summary.js" || | ||
echo "var diff_mode = true;" >>"$NEW_SCAN/summary.js" | ||
|
||
exit 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters