def createReproFile(fuzzerJS, extraPrefs, lines, logPrefix): contentTypes = linesStartingWith(lines, "FRCX Content type: ") contentType = afterColon( contentTypes[0]) if len(contentTypes) > 0 else "text/html" extDict = { 'text/html': 'html', 'application/xhtml+xml': 'xhtml', 'image/svg+xml': 'svg', 'application/vnd.mozilla.xul+xml': 'xul', # 'text/xml' is tricky. We'd want to know the xmlns of the root, and steal its contents but use .xml. # But treating it as xhtml is better than doing nothing, for now. 'text/xml': 'xhtml' } if contentType in extDict: extension = extDict[contentType] else: print "loopdomfuzz is not sure what to do with content type " + repr( contentType) + " :(" extension = "xhtml" [wbefore, wafter] = fuzzDice(os.path.join(emptiesDir, "a." + extension)) possibleDoctype = [] if contentType == "text/html": docTypes = linesStartingWith(lines, "FRCX Doctype: ") if len(docTypes) > 0: possibleDoctype = [afterColon(docTypes[0]) + "\n"] [jbefore, jafter] = fuzzSplice(fuzzerJS) fuzzlines = [ line[12:] for line in linesStartingWith(lines, " /*FRCA1*/ ") ] if len(fuzzlines) < 3: fuzzlines = [ "// Startup crash?\n", "var fuzzSettings = [42,0,42,42,3000,0];\n", "var fuzzCommands = [];\n", "// DDBEGIN\n" ] quittage = [ extraPrefs, "// DDEND\n", 'fuzzCommands.push({ note: "done", rest: true, timeout: 3000});\n', 'fuzzCommands.push({ note: "quit", fun: function() { fuzzPriv.quitApplication(); } });\n', "\n", "function user_pref() { /* Allow randomPrefs.py to parse user_pref lines from this file */ }\n", ] linesToWrite = possibleDoctype + wbefore + jbefore + fuzzlines + quittage + jafter + wafter oFN = logPrefix + "-splice-orig." + extension rFN = logPrefix + "-splice-reduced." + extension writeLinesToFile(linesToWrite, oFN) writeLinesToFile(linesToWrite, rFN) subprocess.call(["gzip", oFN]) return rFN
def createReproFile(fuzzerJS, extraPrefs, lines, logPrefix): contentTypes = linesStartingWith(lines, "FRCX Content type: ") contentType = afterColon(contentTypes[0]) if len(contentTypes) > 0 else "text/html" extDict = { "text/html": "html", "application/xhtml+xml": "xhtml", "image/svg+xml": "svg", "application/vnd.mozilla.xul+xml": "xul", # 'text/xml' is tricky. We'd want to know the xmlns of the root, and steal its contents but use .xml. # But treating it as xhtml is better than doing nothing, for now. "text/xml": "xhtml", } if contentType in extDict: extension = extDict[contentType] else: print "loopdomfuzz is not sure what to do with content type " + repr(contentType) + " :(" extension = "xhtml" [wbefore, wafter] = fuzzDice(os.path.join(emptiesDir, "a." + extension)) possibleDoctype = [] if contentType == "text/html": docTypes = linesStartingWith(lines, "FRCX Doctype: ") if len(docTypes) > 0: possibleDoctype = [afterColon(docTypes[0]) + "\n"] [jbefore, jafter] = fuzzSplice(fuzzerJS) fuzzlines = [line[12:] for line in linesStartingWith(lines, " /*FRCA1*/ ")] if len(fuzzlines) < 3: fuzzlines = [ "// Startup crash?\n", "var fuzzSettings = [42,0,42,42,3000,0];\n", "var fuzzCommands = [];\n", "// DDBEGIN\n", ] quittage = [ extraPrefs, "// DDEND\n", 'fuzzCommands.push({ note: "done", rest: true, timeout: 3000});\n', 'fuzzCommands.push({ note: "quit", fun: function() { fuzzPriv.quitApplication(); } });\n', "\n", "function user_pref() { /* Allow randomPrefs.py to parse user_pref lines from this file */ }\n", ] linesToWrite = possibleDoctype + wbefore + jbefore + fuzzlines + quittage + jafter + wafter oFN = logPrefix + "-splice-orig." + extension rFN = logPrefix + "-splice-reduced." + extension writeLinesToFile(linesToWrite, oFN) writeLinesToFile(linesToWrite, rFN) subprocess.call(["gzip", oFN]) return rFN