From 0cefc981114bda22f4c791b41078a08ed8690f41 Mon Sep 17 00:00:00 2001 From: rfrisch Date: Sun, 1 Jul 2018 12:58:48 +0200 Subject: [PATCH 1/4] support for omega inside loops --- helpers/xslt_generation.rb | 118 ++++++++++++++++++------------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/helpers/xslt_generation.rb b/helpers/xslt_generation.rb index a50a345e..a0a39e24 100644 --- a/helpers/xslt_generation.rb +++ b/helpers/xslt_generation.rb @@ -19,12 +19,12 @@ def initialize(errorString) class TemplateVerificationError < ReportingError attr :template_tree - + def initialize(errorString, template_tree) super(errorString) @template_tree = template_tree end - + def to_s return "#{errorString}" end @@ -77,12 +77,12 @@ def verify_document(document) if i+2 < metacharacters.length && metacharacters[i+2][1] == "µ" tree.concat("#{tabs}¬#{condition}¬ ") else - tree.concat("#{tabs}¬#{condition}¬\n") + tree.concat("#{tabs}¬#{condition}¬\n") end buffer.push("¬") i = i+1 - - + + # ∆ character when "∆" previous = buffer.pop() @@ -99,13 +99,13 @@ def verify_document(document) end locate_error(error, document, metacharacters[i][0]) tree_valid = false - + tree.concat("#{tabs}∆ ←\n") break end tree.concat("#{tabs}∆\n") - - + + # † character when "†" tabs = "\t" * buffer.length @@ -120,12 +120,12 @@ def verify_document(document) tree.concat("#{tabs}†#{condition}†\n") buffer.push("†") i = i+1 - + # ¥ character when "¥" previous = buffer.pop() tabs = "\t" * buffer.length - + if previous != "†" if previous == "¬" error = "error when closing loop, expected ∆, got ¥ instead" @@ -139,14 +139,14 @@ def verify_document(document) # error.concat" at line #{document[0..metacharacters[i][0]].scan(/(?=))/).count}" locate_error(error, document, metacharacters[i][0]) tree_valid = false - - tree.concat("#{tabs}¥ ←\n") + + tree.concat("#{tabs}¥ ←\n") break end - tree.concat("#{tabs}¥\n") - - - + tree.concat("#{tabs}¥\n") + + + # µ character when "µ" tabs = "\t" * buffer.length @@ -162,12 +162,12 @@ def verify_document(document) tree.concat("µ#{condition}µ\n") buffer[-1] = "¬µ" else - tree.concat("#{tabs}µ#{condition}µ\n") + tree.concat("#{tabs}µ#{condition}µ\n") buffer.push("µ") end i = i+1 - - + + # ƒ character when "ƒ" tabs = "\t" * buffer.length @@ -193,26 +193,26 @@ def verify_document(document) break end i = i+1 - + # ÷ character when "÷" tabs = "\t" * buffer.length if buffer[-1] == "µ" || buffer[-1] == "¬µ" tree.concat("#{tabs}÷\n") buffer[-1] = buffer[-1] + "÷" - else + else error = "Error with a ÷ character : character must be inside a choose structure" tree.concat("#{tabs}÷ ←\n") tree_valid = false locate_error(error, document, metacharacters[i][0]) break end - + # ≠ character when "≠" previous = buffer.pop() tabs = "\t" * buffer.length - + if previous != "¬µ÷" if previous == "¬" error = "error when closing loop, expected ∆, got ≠ instead" @@ -227,17 +227,17 @@ def verify_document(document) end tree_valid = false locate_error(error, document, metacharacters[i][0]) - + tree.concat("#{tabs}≠ ←\n") break end tree.concat("#{tabs}≠\n") - + # å character when "å" previous = buffer.pop() tabs = "\t" * buffer.length - + if previous != "µ÷" if previous == "¬" error = "error when closing loop, expected ∆, got å instead" @@ -252,7 +252,7 @@ def verify_document(document) end tree_valid = false locate_error(error, document, metacharacters[i][0]) - + tree.concat("#{tabs}å ←\n") break end @@ -270,9 +270,9 @@ def verify_document(document) end j = j+1 end - + tabs = "\t" * buffer.length - + if j+i == metacharacters.length || not(tree_valid) error = "Error with a ツ character : character without pair" tree_valid = false @@ -280,7 +280,7 @@ def verify_document(document) tree.concat("#{tabs}ツ ←\n") break end - + if j.even? error = "Error with a π character : character without pair" tree_valid = false @@ -288,14 +288,14 @@ def verify_document(document) tree.concat("#{tabs}ツ#{content}ツ ←\n") break end - - + + content = document[metacharacters[i][0]+3..metacharacters[i+j][0]-1].gsub(/<.*?>/,"") tree.concat("#{tabs}ツ#{content}ツ\n") - i = i+j - - - + i = i+j + + + # § character when "§" tabs = "\t" * buffer.length @@ -308,9 +308,9 @@ def verify_document(document) end content = document[metacharacters[i][0]+2..metacharacters[i+1][0]-1].gsub(/<.*?>/,"") tree.concat("#{tabs}§#{content}§\n") - i = i+1 - - + i = i+1 + + # Ω character when "Ω" tabs = "\t" * buffer.length @@ -331,35 +331,35 @@ def verify_document(document) end content = document[metacharacters[i][0]+2..metacharacters[i+1][0]-1].gsub(/<.*?>/,"") tree.concat("#{tabs}Ω#{content}Ω\n") - i = i+1 + i = i+1 # π character when "π" tabs = "\t" * buffer.length - if metacharacters[i+1][1] != "π" + if metacharacters[i+1][1] != "π" error = "Error with a π character : character without pair" tree_valid = false tree.concat("#{tabs}π ←\n") locate_error(error, document, metacharacters[i][0]) break end - + content = document[metacharacters[i][0]+2..metacharacters[i+1][0]-1].gsub(/<.*?>/,"") tree.concat("#{tabs}π#{content}π\n") - i = i+1 - + i = i+1 + # æ character when "æ" tabs = "\t" * buffer.length - if metacharacters[i+1][1] != "æ" + if metacharacters[i+1][1] != "æ" error = "Error with a æ character : character without pair" tree_valid = false tree.concat("#{tabs}æ ←\n") locate_error(error, document, metacharacters[i][0]) break end - + condition = document[metacharacters[i][0]+2..metacharacters[i+1][0]-1].gsub(/<.*?>/,"") - + if /]((?).)*$/.match(document[0..metacharacters[i][0]]).nil? error = "Error with a æ character : character must be inside of table" tree_valid = false @@ -370,32 +370,32 @@ def verify_document(document) tree.concat("#{tabs}æ#{condition}æ\n") buffer.push("æ") i = i+1 - + # ∞ character when "∞" tabs = "\t" * buffer.length - if metacharacters[i+1][1] != "∞" + if metacharacters[i+1][1] != "∞" error = "Error with a ∞ character : character without pair" tree_valid = false tree.concat("#{tabs}∞ ←\n") locate_error(error, document, metacharacters[i][0]) break end - + condition = document[metacharacters[i][0]+3..metacharacters[i+1][0]-1].gsub(/<.*?>/,"") tree.concat("#{tabs}∞#{condition}∞\n") i = i+1 - + # end of table when "<\/w:tr>" if buffer[-1] == "æ" buffer.pop() end - + end - - i = i+1 + + i = i+1 end if not(buffer.empty?) && tree_valid previous = buffer.pop() @@ -415,9 +415,9 @@ def verify_document(document) tree.concat("#{tabs}←\n") tree_valid = false end - + return tree_valid, error, tree - + end def generate_xslt(docx) @@ -444,7 +444,7 @@ def generate_xslt(docx) if not(tree_valid) raise TemplateVerificationError.new(error,tree) end - + # fix for curly apostrophes document = document.gsub(/‘/,"'") document = document.gsub(/’/,"'") @@ -488,7 +488,7 @@ def generate_xslt(docx) # # # - replace[count] = "" + replace[count] = "" count = count + 1 end @@ -1172,4 +1172,4 @@ def compress(omega) end return replacement -end \ No newline at end of file +end From b2f28b5ba21b7c916d27916deada56e9b5b8e8a7 Mon Sep 17 00:00:00 2001 From: rfrisch Date: Sun, 1 Jul 2018 13:14:04 +0200 Subject: [PATCH 2/4] removing omega in loop check in debugger --- helpers/xslt_generation.rb | 8 -------- 1 file changed, 8 deletions(-) diff --git a/helpers/xslt_generation.rb b/helpers/xslt_generation.rb index a0a39e24..bd1f1a7d 100644 --- a/helpers/xslt_generation.rb +++ b/helpers/xslt_generation.rb @@ -321,14 +321,6 @@ def verify_document(document) locate_error(error, document, metacharacters[i][0]) break end - if buffer.grep(/^¬/).any? - error = "Error with a Ω character : must not be used inside loop" - tree_valid = false - content = document[metacharacters[i][0]+2..metacharacters[i+1][0]-1].gsub(/<.*?>/,"") - tree.concat("#{tabs}Ω#{content}Ω ←\n") - locate_error(error, document, metacharacters[i][0]) - break - end content = document[metacharacters[i][0]+2..metacharacters[i+1][0]-1].gsub(/<.*?>/,"") tree.concat("#{tabs}Ω#{content}Ω\n") i = i+1 From 1ef94d96542ecf6ecc21695610a9b7c24bd8f790 Mon Sep 17 00:00:00 2001 From: rfrisch Date: Sun, 1 Jul 2018 13:28:11 +0200 Subject: [PATCH 3/4] switching to utf-8 --- helpers/xslt_generation.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/helpers/xslt_generation.rb b/helpers/xslt_generation.rb index bd1f1a7d..e29a7d38 100644 --- a/helpers/xslt_generation.rb +++ b/helpers/xslt_generation.rb @@ -1,4 +1,3 @@ -# encoding: ASCII-8BIT require 'rubygems' require './model/master.rb' require 'cgi' @@ -431,7 +430,7 @@ def generate_xslt(docx) debug = false document = read_rels(docx,"word/document.xml") - + document.force_encoding("UTF-8") tree_valid, error, tree = verify_document(document) if not(tree_valid) raise TemplateVerificationError.new(error,tree) @@ -1059,7 +1058,7 @@ def generate_xslt_components(docx) components.each do |component| document = read_rels(docx,component) - + document.force_encoding("UTF-8") # replace {} for the sake of XSL document = document.gsub("{","{{").gsub("}","}}") From fb494af4cf7dc79056eb16c32804c6ed8d26de0a Mon Sep 17 00:00:00 2001 From: rfrisch Date: Sun, 1 Jul 2018 14:02:20 +0200 Subject: [PATCH 4/4] adding debugger check when editing report --- routes/admin.rb | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/routes/admin.rb b/routes/admin.rb index 89d1a18d..54ff1748 100644 --- a/routes/admin.rb +++ b/routes/admin.rb @@ -266,7 +266,7 @@ config_options['cvss'] = false config_options['cvssv3'] = false config_options['riskmatrix'] = false - config_options['nist800'] = false + config_options['nist800'] = false end File.open('./config.json', 'w') do |f| @@ -546,11 +546,15 @@ error = false detail = '' begin - xslt = generate_xslt(docx) - xslt_components = generate_xslt_components(docx) - rescue ReportingError => detail - error = true - end + xslt = generate_xslt(docx) + xslt_components = generate_xslt_components(docx) + rescue TemplateVerificationError => detail + @error_message = CGI::escapeHTML(detail.errorString) + @tree = CGI::escapeHTML(detail.template_tree) + return haml :template_error, encode_html: true + rescue ReportingError => detail + error = true + end if error "The report template you uploaded threw an error when parsing:

#{detail.errorString}"