Guest User

Untitled

a guest
Mar 22nd, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. # domato canvas generator.py replacement, put meta refresh tag at top of template.html
  2. # author: stelios
  3.  
  4. from __future__ import print_function
  5. import os
  6. import re
  7. import random
  8. import sys
  9. import cherrypy
  10. import time
  11.  
  12. parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
  13. sys.path.append(parent_dir)
  14. from grammar import Grammar
  15.  
  16. _N_MAIN_LINES = 1000
  17. _N_EVENTHANDLER_LINES = 500
  18.  
  19.  
  20.  
  21. class DomFuzzer(object):
  22. def index(self):
  23. outfile = 'out/%d.html' % time.time()
  24. result = self.GenerateNewSample()
  25.  
  26. if result is not None:
  27. print('Writing a sample to ' + outfile)
  28. try:
  29. f = open(outfile, 'w')
  30. f.write(result)
  31. f.close()
  32. except IOError:
  33. print('Error writing to output')
  34.  
  35. return result
  36. index.exposed = True
  37.  
  38. def __init__(self, grammar_dir):
  39. self.template = None
  40. self.jsgrammar = None
  41.  
  42. f = open(os.path.join(grammar_dir, 'template.html'))
  43. self.template = f.read()
  44. f.close()
  45.  
  46. self.jsgrammar = Grammar()
  47. err = self.jsgrammar.parse_from_file(os.path.join(grammar_dir, 'canvas.txt'))
  48. if err > 0:
  49. print('There were errors parsing grammar')
  50. return
  51.  
  52. def generate_function_body(self, num_lines):
  53. js = ''
  54. js += self.jsgrammar._generate_code(num_lines)
  55.  
  56. return js
  57.  
  58. def GenerateNewSample(self):
  59. """Parses grammar rules from string.
  60.  
  61. Args:
  62. template: A template string.
  63. htmlgrammar: Grammar for generating HTML code.
  64. cssgrammar: Grammar for generating CSS code.
  65. jsgrammar: Grammar for generating JS code.
  66.  
  67. Returns:
  68. A string containing sample data.
  69. """
  70.  
  71. result = self.template
  72. handlers = False
  73. while '<canvasfuzz>' in result:
  74. numlines = _N_MAIN_LINES
  75. if handlers:
  76. numlines = _N_EVENTHANDLER_LINES
  77. else:
  78. handlers = True
  79. result = result.replace(
  80. '<canvasfuzz>',
  81. self.generate_function_body(numlines),
  82. 1
  83. )
  84.  
  85. return result
  86.  
  87.  
  88.  
  89. def main():
  90. cherrypy.quickstart(DomFuzzer(os.path.dirname(__file__)))
  91.  
  92. if __name__ == '__main__':
  93. main()
Add Comment
Please, Sign In to add comment