/** * By default, this service does not do any deobfuscation. In order to do * server-side deobfuscation, you must copy the symbolMaps files to a * directory visible to the server and set the directory using this method. */ public void setSymbolMapsDirectory(String symbolMapsDir) { deobfuscator = StackTraceDeobfuscator.fromFileSystem(symbolMapsDir); } }
private void ensureConfig() { String symbolMapsDirectory = getServletConfig().getInitParameter("symbolMapsDirectory"); String symbolMapsResourcePath = getServletConfig().getInitParameter("symbolMapsResourcePath"); if (symbolMapsResourcePath != null) { try { Logging.setStackTraceDeobfuscator( StackTraceDeobfuscator.fromUrl(getServletContext().getResource(symbolMapsResourcePath))); } catch (MalformedURLException e) { log.log(Level.WARNING, "Failed to get the symbolMaps resource", e); } } else if (symbolMapsDirectory != null) { Logging.setSymbolMapsDirectory(symbolMapsDirectory); } } }
/** * Replaces the stack traces in the given Throwable and its causes with deobfuscated stack traces * wherever possible. * * @param throwable the Throwable that needs its stack trace to be deobfuscated * @param strongName the GWT permutation strong name */ public final void deobfuscateStackTrace(Throwable throwable, String strongName) { throwable.setStackTrace(resymbolize(throwable.getStackTrace(), strongName)); if (throwable.getCause() != null) { deobfuscateStackTrace(throwable.getCause(), strongName); } }
private SourceMapping loadSourceMap(String permutationStrongName, int fragmentId) { SourceMapping toReturn = sourceMaps.get(permutationStrongName + fragmentId); if (toReturn == null) { try { String sourceMapString = loadStreamAsString( getSourceMapInputStream(permutationStrongName, fragmentId)); toReturn = SourceMapConsumerFactory.parse(sourceMapString); sourceMaps.put(permutationStrongName + fragmentId, toReturn); } catch (Exception e) { } } return toReturn; }
/** * Convenience method which resymbolizes an entire stack trace to extent possible. * * @param st the stack trace to resymbolize * @param strongName the GWT permutation strong name * @return a best effort resymbolized stack trace */ public final StackTraceElement[] resymbolize(StackTraceElement[] st, String strongName) { if (st == null) { return null; } // Warm the symbol cache for all symbols in this stack trace. Set<String> requiredSymbols = new HashSet<String>(); for (StackTraceElement ste : st) { requiredSymbols.add(ste.getMethodName()); } loadSymbolMap(strongName, requiredSymbols); StackTraceElement[] newSt = new StackTraceElement[st.length]; for (int i = 0; i < st.length; i++) { newSt[i] = resymbolize(st[i], strongName); } return newSt; }
String symbolData = loadOneSymbol(strongName, ste.getMethodName()); String[] ref = parse( parts[0].substring(0, parts[0].lastIndexOf(')') + 1)); SourceMapping sourceMapping = loadSourceMap(strongName, fragmentId); if (sourceMapping != null && ste.getLineNumber() > -1) { Mapping.OriginalMapping mappingForLine = sourceMapping
deobfuscatorList.add(StackTraceDeobfuscator.fromFileSystem(value)); } else if (name.startsWith(PARAMETER_SYMBOL_MAPS_RESOURCE_PATH)) { deobfuscatorList.add(StackTraceDeobfuscator.fromResource(value)); } else if (name.startsWith(PARAMETER_SYMBOL_MAPS_URL)) { try { URL url = new URL(value); deobfuscatorList.add(StackTraceDeobfuscator.fromUrl(url)); } catch (MalformedURLException ex) { Log.error("Servlet configuration parameter '" + name + "' specifies invalid URL '"
public StackTraceElement[] deobfuscateStackTrace(StackTraceElement[] st, String strongName) { return super.resymbolize(st, strongName); }
public static LogRecord deobfuscateLogRecord( StackTraceDeobfuscator deobfuscator, LogRecord lr, String strongName) { if (lr.getThrown() != null && strongName != null) { deobfuscator.deobfuscateStackTrace(lr.getThrown(), strongName); } return lr; }
private String loadOneSymbol(String strongName, String symbol) { Set<String> symbolSet = new HashSet<String>(); symbolSet.add(symbol); Map<String, String> symbolMap = loadSymbolMap(strongName, symbolSet); return symbolMap.get(symbol); }
new InputStreamReader(getSymbolMapInputStream(strongName))); try { while ((line = bin.readLine()) != null && (symbolsLeftToFind.size() > 0 || !lazyLoad)) {
String symbolData = loadOneSymbol(strongName, ste.getMethodName()); String[] ref = parse( parts[0].substring(0, parts[0].lastIndexOf(')') + 1)); SourceMapping sourceMapping = loadSourceMap(strongName, fragmentId); if (sourceMapping != null && ste.getLineNumber() > -1) { Mapping.OriginalMapping mappingForLine = sourceMapping
/** * Convenience method which resymbolizes an entire stack trace to extent possible. * * @param st the stack trace to resymbolize * @param strongName the GWT permutation strong name * @return a best effort resymbolized stack trace */ public final StackTraceElement[] resymbolize(StackTraceElement[] st, String strongName) { if (st == null) { return null; } // Warm the symbol cache for all symbols in this stack trace. Set<String> requiredSymbols = new HashSet<String>(); for (StackTraceElement ste : st) { requiredSymbols.add(ste.getMethodName()); } loadSymbolMap(strongName, requiredSymbols); StackTraceElement[] newSt = new StackTraceElement[st.length]; for (int i = 0; i < st.length; i++) { newSt[i] = resymbolize(st[i], strongName); } return newSt; }
private SourceMapping loadSourceMap(String permutationStrongName, int fragmentId) { SourceMapping toReturn = sourceMaps.get(permutationStrongName + fragmentId); if (toReturn == null) { try { String sourceMapString = loadStreamAsString( getSourceMapInputStream(permutationStrongName, fragmentId)); toReturn = SourceMapConsumerFactory.parse(sourceMapString); sourceMaps.put(permutationStrongName + fragmentId, toReturn); } catch (Exception e) { } } return toReturn; }
public StackTraceElement[] deobfuscateStackTrace(StackTraceElement[] st, String strongName) { return super.resymbolize(st, strongName); }
public static LogRecord deobfuscateLogRecord( StackTraceDeobfuscator deobfuscator, LogRecord lr, String strongName) { if (lr.getThrown() != null && strongName != null) { deobfuscator.deobfuscateStackTrace(lr.getThrown(), strongName); } return lr; }
private String loadOneSymbol(String strongName, String symbol) { Set<String> symbolSet = new HashSet<String>(); symbolSet.add(symbol); Map<String, String> symbolMap = loadSymbolMap(strongName, symbolSet); return symbolMap.get(symbol); }
new InputStreamReader(getSymbolMapInputStream(strongName))); try { while ((line = bin.readLine()) != null && (symbolsLeftToFind.size() > 0 || !lazyLoad)) {
String symbolData = loadOneSymbol(strongName, ste.getMethodName()); String[] ref = parse( parts[0].substring(0, parts[0].lastIndexOf(')') + 1)); SourceMapping sourceMapping = loadSourceMap(strongName, fragmentId); if (sourceMapping != null && ste.getLineNumber() > -1) { Mapping.OriginalMapping mappingForLine = sourceMapping
/** * Replaces the stack traces in the given Throwable and its causes with deobfuscated stack traces * wherever possible. * * @param throwable the Throwable that needs its stack trace to be deobfuscated * @param strongName the GWT permutation strong name */ public final void deobfuscateStackTrace(Throwable throwable, String strongName) { throwable.setStackTrace(resymbolize(throwable.getStackTrace(), strongName)); if (throwable.getCause() != null) { deobfuscateStackTrace(throwable.getCause(), strongName); } }