buby 1.3.3-java → 1.5.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. data/README.rdoc +28 -14
  2. data/Rakefile +96 -6
  3. data/VERSION.yml +5 -0
  4. data/bin/buby +2 -0
  5. data/buby.gemspec +102 -17
  6. data/{java/src → ext/buby/burp}/BurpExtender.java +189 -29
  7. data/ext/burp_interfaces/burp/IBurpExtender.java +31 -0
  8. data/ext/burp_interfaces/burp/IBurpExtenderCallbacks.java +785 -0
  9. data/ext/burp_interfaces/burp/IContextMenuFactory.java +38 -0
  10. data/ext/burp_interfaces/burp/IContextMenuInvocation.java +156 -0
  11. data/ext/burp_interfaces/burp/ICookie.java +53 -0
  12. data/ext/burp_interfaces/burp/IExtensionHelpers.java +352 -0
  13. data/ext/burp_interfaces/burp/IExtensionStateListener.java +27 -0
  14. data/ext/burp_interfaces/burp/IHttpListener.java +37 -0
  15. data/ext/burp_interfaces/burp/IHttpRequestResponse.java +102 -0
  16. data/ext/burp_interfaces/burp/IHttpRequestResponsePersisted.java +26 -0
  17. data/ext/burp_interfaces/burp/IHttpRequestResponseWithMarkers.java +44 -0
  18. data/ext/burp_interfaces/burp/IHttpService.java +39 -0
  19. data/ext/burp_interfaces/burp/IInterceptedProxyMessage.java +116 -0
  20. data/ext/burp_interfaces/burp/IIntruderAttack.java +31 -0
  21. data/ext/burp_interfaces/burp/IIntruderPayloadGenerator.java +50 -0
  22. data/ext/burp_interfaces/burp/IIntruderPayloadGeneratorFactory.java +40 -0
  23. data/ext/burp_interfaces/burp/IIntruderPayloadProcessor.java +45 -0
  24. data/{java/src → ext/burp_interfaces}/burp/IMenuItemHandler.java +36 -40
  25. data/ext/burp_interfaces/burp/IMessageEditor.java +64 -0
  26. data/ext/burp_interfaces/burp/IMessageEditorController.java +49 -0
  27. data/ext/burp_interfaces/burp/IMessageEditorTab.java +102 -0
  28. data/ext/burp_interfaces/burp/IMessageEditorTabFactory.java +38 -0
  29. data/ext/burp_interfaces/burp/IParameter.java +104 -0
  30. data/ext/burp_interfaces/burp/IProxyListener.java +37 -0
  31. data/ext/burp_interfaces/burp/IRequestInfo.java +95 -0
  32. data/ext/burp_interfaces/burp/IResponseInfo.java +54 -0
  33. data/ext/burp_interfaces/burp/IScanIssue.java +120 -0
  34. data/ext/burp_interfaces/burp/IScanQueueItem.java +80 -0
  35. data/ext/burp_interfaces/burp/IScannerCheck.java +89 -0
  36. data/ext/burp_interfaces/burp/IScannerInsertionPoint.java +156 -0
  37. data/ext/burp_interfaces/burp/IScannerInsertionPointProvider.java +38 -0
  38. data/ext/burp_interfaces/burp/IScannerListener.java +30 -0
  39. data/ext/burp_interfaces/burp/IScopeChangeListener.java +25 -0
  40. data/ext/burp_interfaces/burp/ISessionHandlingAction.java +51 -0
  41. data/ext/burp_interfaces/burp/ITab.java +38 -0
  42. data/ext/burp_interfaces/burp/ITempFile.java +33 -0
  43. data/ext/burp_interfaces/burp/ITextEditor.java +90 -0
  44. data/lib/buby/burp_extender/console_frame.rb +33 -0
  45. data/lib/buby/burp_extender/console_pane.rb +26 -0
  46. data/lib/buby/burp_extender/console_tab.rb +15 -0
  47. data/lib/buby/burp_extender/context_menu.rb +29 -0
  48. data/lib/buby/burp_extender/context_menu_factory.rb +17 -0
  49. data/lib/buby/burp_extender/context_menu_item.rb +13 -0
  50. data/lib/buby/burp_extender/jcheck_box_menu_item.rb +12 -0
  51. data/lib/buby/burp_extender/jmenu.rb +11 -0
  52. data/lib/buby/burp_extender/jmenu_item.rb +12 -0
  53. data/lib/buby/burp_extender/menu.rb +11 -0
  54. data/lib/buby/burp_extender/menu_item.rb +12 -0
  55. data/lib/buby/burp_extender.rb +339 -0
  56. data/lib/buby/context_menu_factory.rb +35 -0
  57. data/lib/buby/cookie.rb +37 -0
  58. data/lib/buby/extender.rb +156 -0
  59. data/lib/buby/http_listener.rb +29 -0
  60. data/lib/buby/{extends → implants}/buby_array_wrapper.rb +0 -0
  61. data/lib/buby/implants/context_menu_invocation.rb +113 -0
  62. data/lib/buby/implants/cookie.rb +47 -0
  63. data/lib/buby/implants/extension_helpers.rb +286 -0
  64. data/lib/buby/{extends → implants}/http_request_response.rb +8 -1
  65. data/lib/buby/implants/intercepted_proxy_message.rb +53 -0
  66. data/lib/buby/implants/intruder_attack.rb +42 -0
  67. data/lib/buby/implants/jruby.rb +64 -0
  68. data/lib/buby/implants/message_editor.rb +70 -0
  69. data/lib/buby/implants/message_editor_controller.rb +60 -0
  70. data/lib/buby/implants/parameter.rb +84 -0
  71. data/lib/buby/implants/request_info.rb +47 -0
  72. data/lib/buby/implants/response_info.rb +44 -0
  73. data/lib/buby/{extends → implants}/scan_issue.rb +1 -2
  74. data/lib/buby/implants/scan_queue_item.rb +53 -0
  75. data/lib/buby/implants/scanner_insertion_point.rb +92 -0
  76. data/lib/buby/implants/temp_file.rb +43 -0
  77. data/lib/buby/implants/text_editor.rb +63 -0
  78. data/lib/buby/implants.rb +28 -0
  79. data/lib/buby/intruder_payload_generator.rb +60 -0
  80. data/lib/buby/intruder_payload_generator_factory.rb +32 -0
  81. data/lib/buby/intruder_payload_processor.rb +38 -0
  82. data/lib/buby/message_editor_controller.rb +41 -0
  83. data/lib/buby/message_editor_tab.rb +98 -0
  84. data/lib/buby/message_editor_tab_factory.rb +28 -0
  85. data/lib/buby/parameter/base.rb +40 -0
  86. data/lib/buby/parameter/body.rb +7 -0
  87. data/lib/buby/parameter/cookie.rb +7 -0
  88. data/lib/buby/parameter/url.rb +7 -0
  89. data/lib/buby/parameter.rb +15 -0
  90. data/lib/buby/proxy_listener.rb +26 -0
  91. data/lib/buby/scan_issue.rb +112 -0
  92. data/lib/buby/scanner_check.rb +84 -0
  93. data/lib/buby/scanner_insertion_point.rb +118 -0
  94. data/lib/buby/scanner_insertion_point_provider.rb +27 -0
  95. data/lib/buby/scanner_listener.rb +22 -0
  96. data/lib/buby/scope_change_listener.rb +19 -0
  97. data/lib/buby/session_handling_action.rb +43 -0
  98. data/lib/buby/tab.rb +37 -0
  99. data/lib/buby/version.rb +9 -0
  100. data/lib/buby.rb +892 -101
  101. metadata +118 -22
  102. data/VERSION +0 -1
  103. data/java/buby.jar +0 -0
  104. data/java/src/burp/IBurpExtender.java +0 -180
  105. data/java/src/burp/IBurpExtenderCallbacks.java +0 -373
  106. data/java/src/burp/IHttpRequestResponse.java +0 -156
  107. data/java/src/burp/IScanIssue.java +0 -106
  108. data/java/src/burp/IScanQueueItem.java +0 -76
  109. data/lib/buby/extends.rb +0 -4
@@ -0,0 +1,156 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IScannerInsertionPoint.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ /**
13
+ * This interface is used to define an insertion point for use by active Scanner
14
+ * checks. Extensions can obtain instances of this interface by registering an
15
+ * <code>IScannerCheck</code>, or can create instances for use by Burp's own
16
+ * scan checks by registering an
17
+ * <code>IScannerInsertionPointProvider</code>.
18
+ */
19
+ public interface IScannerInsertionPoint
20
+ {
21
+ /**
22
+ * Used to indicate where the payload is inserted into the value of a URL
23
+ * parameter.
24
+ */
25
+ static final byte INS_PARAM_URL = 0x00;
26
+ /**
27
+ * Used to indicate where the payload is inserted into the value of a body
28
+ * parameter.
29
+ */
30
+ static final byte INS_PARAM_BODY = 0x01;
31
+ /**
32
+ * Used to indicate where the payload is inserted into the value of an HTTP
33
+ * cookie.
34
+ */
35
+ static final byte INS_PARAM_COOKIE = 0x02;
36
+ /**
37
+ * Used to indicate where the payload is inserted into the value of an item
38
+ * of data within an XML data structure.
39
+ */
40
+ static final byte INS_PARAM_XML = 0x03;
41
+ /**
42
+ * Used to indicate where the payload is inserted into the value of a tag
43
+ * attribute within an XML structure.
44
+ */
45
+ static final byte INS_PARAM_XML_ATTR = 0x04;
46
+ /**
47
+ * Used to indicate where the payload is inserted into the value of a
48
+ * parameter attribute within a multi-part message body (such as the name of
49
+ * an uploaded file).
50
+ */
51
+ static final byte INS_PARAM_MULTIPART_ATTR = 0x05;
52
+ /**
53
+ * Used to indicate where the payload is inserted into the value of an item
54
+ * of data within a JSON structure.
55
+ */
56
+ static final byte INS_PARAM_JSON = 0x06;
57
+ /**
58
+ * Used to indicate where the payload is inserted into the value of an AMF
59
+ * parameter.
60
+ */
61
+ static final byte INS_PARAM_AMF = 0x07;
62
+ /**
63
+ * Used to indicate where the payload is inserted into the value of an HTTP
64
+ * request header.
65
+ */
66
+ static final byte INS_HEADER = 0x20;
67
+ /**
68
+ * Used to indicate where the payload is inserted into a REST parameter
69
+ * within the URL file path.
70
+ */
71
+ static final byte INS_URL_REST = 0x21;
72
+ /**
73
+ * Used to indicate where the payload is inserted into the name of an added
74
+ * URL parameter.
75
+ */
76
+ static final byte INS_PARAM_NAME_URL = 0x22;
77
+ /**
78
+ * Used to indicate where the payload is inserted into the name of an added
79
+ * body parameter.
80
+ */
81
+ static final byte INS_PARAM_NAME_BODY = 0x23;
82
+ /**
83
+ * Used to indicate where the payload is inserted at a location manually
84
+ * configured by the user.
85
+ */
86
+ static final byte INS_USER_PROVIDED = 0x40;
87
+ /**
88
+ * Used to indicate where the insertion point is provided by an
89
+ * extension-registered
90
+ * <code>IScannerInsertionPointProvider</code>.
91
+ */
92
+ static final byte INS_EXTENSION_PROVIDED = 0x41;
93
+ /**
94
+ * Used to indicate where the payload is inserted at an unknown location
95
+ * within the request.
96
+ */
97
+ static final byte INS_UNKNOWN = 0x7f;
98
+
99
+ /**
100
+ * This method returns the name of the insertion point.
101
+ *
102
+ * @return The name of the insertion point (for example, a description of a
103
+ * particular request parameter).
104
+ */
105
+ String getInsertionPointName();
106
+
107
+ /**
108
+ * This method returns the base value for this insertion point.
109
+ *
110
+ * @return the base value that appears in this insertion point in the base
111
+ * request being scanned, or
112
+ * <code>null</code> if there is no value in the base request that
113
+ * corresponds to this insertion point.
114
+ */
115
+ String getBaseValue();
116
+
117
+ /**
118
+ * This method is used to build a request with the specified payload placed
119
+ * into the insertion point. Any necessary adjustments to the Content-Length
120
+ * header will be made by the Scanner itself when the request is issued, and
121
+ * there is no requirement for the insertion point to do this. <b>Note:</b>
122
+ * Burp's built-in scan checks do not apply any payload encoding (such as
123
+ * URL-encoding) when dealing with an extension-provided insertion point.
124
+ * Custom insertion points are responsible for performing any data encoding
125
+ * that is necessary given the nature and location of the insertion point.
126
+ *
127
+ * @param payload The payload that should be placed into the insertion
128
+ * point.
129
+ * @return The resulting request.
130
+ */
131
+ byte[] buildRequest(byte[] payload);
132
+
133
+ /**
134
+ * This method is used to determine the offsets of the payload value within
135
+ * the request, when it is placed into the insertion point. Scan checks may
136
+ * invoke this method when reporting issues, so as to highlight the relevant
137
+ * part of the request within the UI.
138
+ *
139
+ * @param payload The payload that should be placed into the insertion
140
+ * point.
141
+ * @return An int[2] array containing the start and end offsets of the
142
+ * payload within the request, or null if this is not applicable (for
143
+ * example, where the insertion point places a payload into a serialized
144
+ * data structure, the raw payload may not literally appear anywhere within
145
+ * the resulting request).
146
+ */
147
+ int[] getPayloadOffsets(byte[] payload);
148
+
149
+ /**
150
+ * This method returns the type of the insertion point.
151
+ *
152
+ * @return The type of the insertion point. Available types are defined in
153
+ * this interface.
154
+ */
155
+ byte getInsertionPointType();
156
+ }
@@ -0,0 +1,38 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IScannerInsertionPointProvider.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ import java.util.List;
13
+
14
+ /**
15
+ * Extensions can implement this interface and then call
16
+ * <code>IBurpExtenderCallbacks.registerScannerInsertionPointProvider()</code>
17
+ * to register a factory for custom Scanner insertion points.
18
+ */
19
+ public interface IScannerInsertionPointProvider
20
+ {
21
+ /**
22
+ * When a request is actively scanned, the Scanner will invoke this method,
23
+ * and the provider should provide a list of custom insertion points that
24
+ * will be used in the scan. <b>Note:</b> these insertion points are used in
25
+ * addition to those that are derived from Burp Scanner's configuration, and
26
+ * those provided by any other Burp extensions.
27
+ *
28
+ * @param baseRequestResponse The base request that will be actively
29
+ * scanned.
30
+ * @return A list of
31
+ * <code>IScannerInsertionPoint</code> objects that should be used in the
32
+ * scanning, or
33
+ * <code>null</code> if no custom insertion points are applicable for this
34
+ * request.
35
+ */
36
+ List<IScannerInsertionPoint> getInsertionPoints(
37
+ IHttpRequestResponse baseRequestResponse);
38
+ }
@@ -0,0 +1,30 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IScannerListener.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ /**
13
+ * Extensions can implement this interface and then call
14
+ * <code>IBurpExtenderCallbacks.registerScannerListener()</code> to register a
15
+ * Scanner listener. The listener will be notified of new issues that are
16
+ * reported by the Scanner tool. Extensions can perform custom analysis or
17
+ * logging of Scanner issues by registering a Scanner listener.
18
+ */
19
+ public interface IScannerListener
20
+ {
21
+ /**
22
+ * This method is invoked when a new issue is added to Burp Scanner's
23
+ * results.
24
+ *
25
+ * @param issue An
26
+ * <code>IScanIssue</code> object that the extension can query to obtain
27
+ * details about the new issue.
28
+ */
29
+ void newScanIssue(IScanIssue issue);
30
+ }
@@ -0,0 +1,25 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IScopeChangeListener.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ /**
13
+ * Extensions can implement this interface and then call
14
+ * <code>IBurpExtenderCallbacks.registerScopeChangeListener()</code> to register
15
+ * a scope change listener. The listener will be notified whenever a change
16
+ * occurs to Burp's suite-wide target scope.
17
+ */
18
+ public interface IScopeChangeListener
19
+ {
20
+ /**
21
+ * This method is invoked whenever a change occurs to Burp's suite-wide
22
+ * target scope.
23
+ */
24
+ void scopeChanged();
25
+ }
@@ -0,0 +1,51 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)ISessionHandlingAction.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ /**
13
+ * Extensions can implement this interface and then call
14
+ * <code>IBurpExtenderCallbacks.registerSessionHandlingAction()</code> to
15
+ * register a custom session handling action. Each registered action will be
16
+ * available within the session handling rule UI for the user to select as a
17
+ * rule action. Users can choose to invoke an action directly in its own right,
18
+ * or following execution of a macro.
19
+ */
20
+ public interface ISessionHandlingAction
21
+ {
22
+ /**
23
+ * This method is used by Burp to obtain the name of the session handling
24
+ * action. This will be displayed as an option within the session handling
25
+ * rule editor when the user selects to execute an extension-provided
26
+ * action.
27
+ *
28
+ * @return The name of the action.
29
+ */
30
+ String getActionName();
31
+
32
+ /**
33
+ * This method is invoked when the session handling action should be
34
+ * executed. This may happen as an action in its own right, or as a
35
+ * sub-action following execution of a macro.
36
+ *
37
+ * @param currentRequest The base request that is currently being processed.
38
+ * The action can query this object to obtain details about the base
39
+ * request. It can issue additional requests of its own if necessary, and
40
+ * can use the setter methods on this object to update the base request.
41
+ * @param macroItems If the action is invoked following execution of a
42
+ * macro, this parameter contains the result of executing the macro.
43
+ * Otherwise, it is
44
+ * <code>null</code>. Actions can use the details of the macro items to
45
+ * perform custom analysis of the macro to derive values of non-standard
46
+ * session handling tokens, etc.
47
+ */
48
+ void performAction(
49
+ IHttpRequestResponse currentRequest,
50
+ IHttpRequestResponse[] macroItems);
51
+ }
@@ -0,0 +1,38 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)ITab.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ import java.awt.Component;
13
+
14
+ /**
15
+ * This interface is used to provide Burp with details of a custom tab that will
16
+ * be added to Burp's UI, using a method such as
17
+ * <code>IBurpExtenderCallbacks.addSuiteTab()</code>.
18
+ */
19
+ public interface ITab
20
+ {
21
+ /**
22
+ * Burp uses this method to obtain the caption that should appear on the
23
+ * custom tab when it is displayed.
24
+ *
25
+ * @return The caption that should appear on the custom tab when it is
26
+ * displayed.
27
+ */
28
+ String getTabCaption();
29
+
30
+ /**
31
+ * Burp uses this method to obtain the component that should be used as the
32
+ * contents of the custom tab when it is displayed.
33
+ *
34
+ * @return The component that should be used as the contents of the custom
35
+ * tab when it is displayed.
36
+ */
37
+ Component getUiComponent();
38
+ }
@@ -0,0 +1,33 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)ITempFile.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ /**
13
+ * This interface is used to hold details of a temporary file that has been
14
+ * created via a call to
15
+ * <code>IBurpExtenderCallbacks.saveToTempFile()</code>.
16
+ *
17
+ */
18
+ public interface ITempFile
19
+ {
20
+ /**
21
+ * This method is used to retrieve the contents of the buffer that was saved
22
+ * in the temporary file.
23
+ *
24
+ * @return The contents of the buffer that was saved in the temporary file.
25
+ */
26
+ byte[] getBuffer();
27
+
28
+ /**
29
+ * This method is used to permanently delete the temporary file when it is
30
+ * no longer required.
31
+ */
32
+ void delete();
33
+ }
@@ -0,0 +1,90 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)ITextEditor.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ import java.awt.Component;
13
+
14
+ /**
15
+ * This interface is used to provide extensions with an instance of Burp's raw
16
+ * text editor, for the extension to use in its own UI. Extensions should call
17
+ * <code>IBurpExtenderCallbacks.createTextEditor()</code> to obtain an instance
18
+ * of this interface.
19
+ */
20
+ public interface ITextEditor
21
+ {
22
+ /**
23
+ * This method returns the UI component of the editor, for extensions to add
24
+ * to their own UI.
25
+ *
26
+ * @return The UI component of the editor.
27
+ */
28
+ Component getComponent();
29
+
30
+ /**
31
+ * This method is used to control whether the editor is currently editable.
32
+ * This status can be toggled on and off as required.
33
+ *
34
+ * @param editable Indicates whether the editor should be currently
35
+ * editable.
36
+ */
37
+ void setEditable(boolean editable);
38
+
39
+ /**
40
+ * This method is used to update the currently displayed text in the editor.
41
+ *
42
+ * @param text The text to be displayed.
43
+ */
44
+ void setText(byte[] text);
45
+
46
+ /**
47
+ * This method is used to retrieve the currently displayed text.
48
+ *
49
+ * @return The currently displayed text.
50
+ */
51
+ byte[] getText();
52
+
53
+ /**
54
+ * This method is used to determine whether the user has modified the
55
+ * contents of the editor.
56
+ *
57
+ * @return An indication of whether the user has modified the contents of
58
+ * the editor since the last call to
59
+ * <code>setText()</code>.
60
+ */
61
+ boolean isTextModified();
62
+
63
+ /**
64
+ * This method is used to obtain the currently selected text.
65
+ *
66
+ * @return The currently selected text, or
67
+ * <code>null</code> if the user has not made any selection.
68
+ */
69
+ byte[] getSelectedText();
70
+
71
+ /**
72
+ * This method can be used to retrieve the bounds of the user's selection
73
+ * into the displayed text, if applicable.
74
+ *
75
+ * @return An int[2] array containing the start and end offsets of the
76
+ * user's selection within the displayed text. If the user has not made any
77
+ * selection in the current message, both offsets indicate the position of
78
+ * the caret within the editor.
79
+ */
80
+ int[] getSelectionBounds();
81
+
82
+ /**
83
+ * This method is used to update the search expression that is shown in the
84
+ * search bar below the editor. The editor will automatically highlight any
85
+ * regions of the displayed text that match the search expression.
86
+ *
87
+ * @param expression The search expression.
88
+ */
89
+ void setSearchExpression(String expression);
90
+ }