From 9ce85bb563ec9ac82698c82329a3ab7bae62af0e Mon Sep 17 00:00:00 2001 From: Itay R Date: Tue, 19 Apr 2016 16:57:18 +0300 Subject: [PATCH] Improve REPL autocompletion - case insensitive - any substring will trigger a match --- src/frida/repl.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/frida/repl.py b/src/frida/repl.py index 1e99d75..c60bec7 100644 --- a/src/frida/repl.py +++ b/src/frida/repl.py @@ -9,6 +9,7 @@ def main(): import json import os import platform + import re from prompt_toolkit.shortcuts import create_prompt_application, create_output, create_eventloop from prompt_toolkit.history import FileHistory from prompt_toolkit.completion import Completion, Completer @@ -417,7 +418,7 @@ rpc.exports.evaluate = function (expression) { } catch (e) { []; }"""): - if key.startswith(after_dot): + if self._pattern_matches(after_dot, key): yield Completion(key, -len(after_dot)) else: if magic: @@ -425,7 +426,7 @@ rpc.exports.evaluate = function (expression) { else: keys = self._get_keys("Object.getOwnPropertyNames(this)") for key in keys: - if not key.startswith(before_dot) or (key.startswith('_') and before_dot == ''): + if not self._pattern_matches(before_dot, key) or (key.startswith('_') and before_dot == ''): continue yield Completion(key, -len(before_dot)) except frida.InvalidOperationError: @@ -442,6 +443,9 @@ rpc.exports.evaluate = function (expression) { tokens = list(self._lexer.get_tokens(name)) return len(tokens) == 2 and tokens[0][0] in Token.Name.subtypes + def _pattern_matches(self, pattern, text): + return re.search(re.escape(pattern), text, re.IGNORECASE) != None + def hexdump(src, length=16): try: xrange