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,37 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IProxyListener.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.registerProxyListener()</code> to register a
15
+ * Proxy listener. The listener will be notified of requests and responses being
16
+ * processed by the Proxy tool. Extensions can perform custom analysis or
17
+ * modification of these messages, and control in-UI message interception, by
18
+ * registering a proxy listener.
19
+ */
20
+ public interface IProxyListener
21
+ {
22
+ /**
23
+ * This method is invoked when an HTTP message is being processed by the
24
+ * Proxy.
25
+ *
26
+ * @param messageIsRequest Indicates whether the HTTP message is a request
27
+ * or a response.
28
+ * @param message An
29
+ * <code>IInterceptedProxyMessage</code> object that extensions can use to
30
+ * query and update details of the message, and control whether the message
31
+ * should be intercepted and displayed to the user for manual review or
32
+ * modification.
33
+ */
34
+ void processProxyMessage(
35
+ boolean messageIsRequest,
36
+ IInterceptedProxyMessage message);
37
+ }
@@ -0,0 +1,95 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IRequestInfo.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.net.URL;
13
+ import java.util.List;
14
+
15
+ /**
16
+ * This interface is used to retrieve key details about an HTTP request.
17
+ * Extensions can obtain an
18
+ * <code>IRequestInfo</code> object for a given request by calling
19
+ * <code>IExtensionHelpers.analyzeRequest()</code>.
20
+ */
21
+ public interface IRequestInfo
22
+ {
23
+ /**
24
+ * Used to indicate that there is no content.
25
+ */
26
+ static final byte CONTENT_TYPE_NONE = 0;
27
+ /**
28
+ * Used to indicate URL-encoded content.
29
+ */
30
+ static final byte CONTENT_TYPE_URL_ENCODED = 1;
31
+ /**
32
+ * Used to indicate multi-part content.
33
+ */
34
+ static final byte CONTENT_TYPE_MULTIPART = 2;
35
+ /**
36
+ * Used to indicate XML content.
37
+ */
38
+ static final byte CONTENT_TYPE_XML = 3;
39
+ /**
40
+ * Used to indicate JSON content.
41
+ */
42
+ static final byte CONTENT_TYPE_JSON = 4;
43
+ /**
44
+ * Used to indicate AMF content.
45
+ */
46
+ static final byte CONTENT_TYPE_AMF = 5;
47
+ /**
48
+ * Used to indicate unknown content.
49
+ */
50
+ static final byte CONTENT_TYPE_UNKNOWN = -1;
51
+
52
+ /**
53
+ * This method is used to obtain the HTTP method used in the request.
54
+ *
55
+ * @return The HTTP method used in the request.
56
+ */
57
+ String getMethod();
58
+
59
+ /**
60
+ * This method is used to obtain the URL in the request.
61
+ *
62
+ * @return The URL in the request.
63
+ */
64
+ URL getUrl();
65
+
66
+ /**
67
+ * This method is used to obtain the HTTP headers contained in the request.
68
+ *
69
+ * @return The HTTP headers contained in the request.
70
+ */
71
+ List<String> getHeaders();
72
+
73
+ /**
74
+ * This method is used to obtain the parameters contained in the request.
75
+ *
76
+ * @return The parameters contained in the request.
77
+ */
78
+ List<IParameter> getParameters();
79
+
80
+ /**
81
+ * This method is used to obtain the offset within the request where the
82
+ * message body begins.
83
+ *
84
+ * @return The offset within the request where the message body begins.
85
+ */
86
+ int getBodyOffset();
87
+
88
+ /**
89
+ * This method is used to obtain the content type of the message body.
90
+ *
91
+ * @return An indication of the content type of the message body. Available
92
+ * types are defined within this interface.
93
+ */
94
+ byte getContentType();
95
+ }
@@ -0,0 +1,54 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IResponseInfo.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
+ * This interface is used to retrieve key details about an HTTP response.
16
+ * Extensions can obtain an
17
+ * <code>IResponseInfo</code> object for a given response by calling
18
+ * <code>IExtensionHelpers.analyzeResponse()</code>.
19
+ */
20
+ public interface IResponseInfo
21
+ {
22
+ /**
23
+ * This method is used to obtain the HTTP headers contained in the response.
24
+ *
25
+ * @return The HTTP headers contained in the response.
26
+ */
27
+ List<String> getHeaders();
28
+
29
+ /**
30
+ * This method is used to obtain the offset within the response where the
31
+ * message body begins.
32
+ *
33
+ * @return The offset within the response where the message body begins.
34
+ */
35
+ int getBodyOffset();
36
+
37
+ /**
38
+ * This method is used to obtain the HTTP status code contained in the
39
+ * response.
40
+ *
41
+ * @return The HTTP status code contained in the response.
42
+ */
43
+ short getStatusCode();
44
+
45
+ /**
46
+ * This method is used to obtain details of the HTTP cookies set in the
47
+ * response.
48
+ *
49
+ * @return A list of
50
+ * <code>ICookie</code> objects representing the cookies set in the
51
+ * response, if any.
52
+ */
53
+ List<ICookie> getCookies();
54
+ }
@@ -0,0 +1,120 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IScanIssue.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 retrieve details of Scanner issues. Extensions can
14
+ * obtain details of issues by registering an
15
+ * <code>IScannerListener</code> or by calling
16
+ * <code>IBurpExtenderCallbacks.getScanIssues()</code>. Extensions can also add
17
+ * custom Scanner issues by registering an
18
+ * <code>IScannerCheck</code> or calling
19
+ * <code>IBurpExtenderCallbacks.addScanIssue()</code>, and providing their own
20
+ * implementations of this interface
21
+ */
22
+ public interface IScanIssue
23
+ {
24
+ /**
25
+ * This method returns the URL for which the issue was generated.
26
+ *
27
+ * @return The URL for which the issue was generated.
28
+ */
29
+ java.net.URL getUrl();
30
+
31
+ /**
32
+ * This method returns the name of the issue type.
33
+ *
34
+ * @return The name of the issue type (e.g. "SQL injection").
35
+ */
36
+ String getIssueName();
37
+
38
+ /**
39
+ * This method returns a numeric identifier of the issue type. See the Burp
40
+ * Scanner help documentation for a listing of all the issue types.
41
+ *
42
+ * @return A numeric identifier of the issue type.
43
+ */
44
+ int getIssueType();
45
+
46
+ /**
47
+ * This method returns the issue severity level.
48
+ *
49
+ * @return The issue severity level. Expected values are "High", "Medium",
50
+ * "Low", "Information" or "False positive".
51
+ *
52
+ */
53
+ String getSeverity();
54
+
55
+ /**
56
+ * This method returns the issue confidence level.
57
+ *
58
+ * @return The issue confidence level. Expected values are "Certain", "Firm"
59
+ * or "Tentative".
60
+ */
61
+ String getConfidence();
62
+
63
+ /**
64
+ * This method returns a background description for this type of issue.
65
+ *
66
+ * @return A background description for this type of issue, or
67
+ * <code>null</code> if none applies.
68
+ */
69
+ String getIssueBackground();
70
+
71
+ /**
72
+ * This method returns a background description of the remediation for this
73
+ * type of issue.
74
+ *
75
+ * @return A background description of the remediation for this type of
76
+ * issue, or
77
+ * <code>null</code> if none applies.
78
+ */
79
+ String getRemediationBackground();
80
+
81
+ /**
82
+ * This method returns detailed information about this specific instance of
83
+ * the issue.
84
+ *
85
+ * @return Detailed information about this specific instance of the issue,
86
+ * or
87
+ * <code>null</code> if none applies.
88
+ */
89
+ String getIssueDetail();
90
+
91
+ /**
92
+ * This method returns detailed information about the remediation for this
93
+ * specific instance of the issue.
94
+ *
95
+ * @return Detailed information about the remediation for this specific
96
+ * instance of the issue, or
97
+ * <code>null</code> if none applies.
98
+ */
99
+ String getRemediationDetail();
100
+
101
+ /**
102
+ * This method returns the HTTP messages on the basis of which the issue was
103
+ * generated.
104
+ *
105
+ * @return The HTTP messages on the basis of which the issue was generated.
106
+ * <b>Note:</b> The items in this array should be instances of
107
+ * <code>IHttpRequestResponseWithMarkers</code> if applicable, so that
108
+ * details of the relevant portions of the request and response messages are
109
+ * available.
110
+ */
111
+ IHttpRequestResponse[] getHttpMessages();
112
+
113
+ /**
114
+ * This method returns the HTTP service for which the issue was generated.
115
+ *
116
+ * @return The HTTP service for which the issue was generated.
117
+ */
118
+ IHttpService getHttpService();
119
+
120
+ }
@@ -0,0 +1,80 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IScanQueueItem.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 retrieve details of items in the Burp Scanner
14
+ * active scan queue. Extensions can obtain references to scan queue items by
15
+ * calling
16
+ * <code>IBurpExtenderCallbacks.doActiveScan()</code>.
17
+ */
18
+ public interface IScanQueueItem
19
+ {
20
+ /**
21
+ * This method returns a description of the status of the scan queue item.
22
+ *
23
+ * @return A description of the status of the scan queue item.
24
+ */
25
+ String getStatus();
26
+
27
+ /**
28
+ * This method returns an indication of the percentage completed for the
29
+ * scan queue item.
30
+ *
31
+ * @return An indication of the percentage completed for the scan queue
32
+ * item.
33
+ */
34
+ byte getPercentageComplete();
35
+
36
+ /**
37
+ * This method returns the number of requests that have been made for the
38
+ * scan queue item.
39
+ *
40
+ * @return The number of requests that have been made for the scan queue
41
+ * item.
42
+ */
43
+ int getNumRequests();
44
+
45
+ /**
46
+ * This method returns the number of network errors that have occurred for
47
+ * the scan queue item.
48
+ *
49
+ * @return The number of network errors that have occurred for the scan
50
+ * queue item.
51
+ */
52
+ int getNumErrors();
53
+
54
+ /**
55
+ * This method returns the number of attack insertion points being used for
56
+ * the scan queue item.
57
+ *
58
+ * @return The number of attack insertion points being used for the scan
59
+ * queue item.
60
+ */
61
+ int getNumInsertionPoints();
62
+
63
+ /**
64
+ * This method allows the scan queue item to be canceled.
65
+ */
66
+ void cancel();
67
+
68
+ /**
69
+ * This method returns details of the issues generated for the scan queue
70
+ * item. <b>Note:</b> different items within the scan queue may contain
71
+ * duplicated versions of the same issues - for example, if the same request
72
+ * has been scanned multiple times. Duplicated issues are consolidated in
73
+ * the main view of scan results. Extensions can register an
74
+ * <code>IScannerListener</code> to get details only of unique, newly
75
+ * discovered Scanner issues post-consolidation.
76
+ *
77
+ * @return Details of the issues generated for the scan queue item.
78
+ */
79
+ IScanIssue[] getIssues();
80
+ }
@@ -0,0 +1,89 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IScannerCheck.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.registerScannerCheck()</code> to register a
17
+ * custom Scanner check. When performing scanning, Burp will ask the check to
18
+ * perform active or passive scanning on the base request, and report any
19
+ * Scanner issues that are identified.
20
+ */
21
+ public interface IScannerCheck
22
+ {
23
+ /**
24
+ * The Scanner invokes this method for each base request / response that is
25
+ * passively scanned. <b>Note:</b> Extensions should not only analyze the
26
+ * HTTP messages provided during passive scanning, and should not make any
27
+ * new HTTP requests of their own.
28
+ *
29
+ * @param baseRequestResponse The base HTTP request / response that should
30
+ * be passively scanned.
31
+ * @return A list of
32
+ * <code>IScanIssue</code> objects, or
33
+ * <code>null</code> if no issues are identified.
34
+ */
35
+ List<IScanIssue> doPassiveScan(IHttpRequestResponse baseRequestResponse);
36
+
37
+ /**
38
+ * The Scanner invokes this method for each insertion point that is actively
39
+ * scanned. Extensions may issue HTTP requests as required to carry out
40
+ * active scanning, and should use the
41
+ * <code>IScannerInsertionPoint</code> object provided to build scan
42
+ * requests for particular payloads. <b>Note:</b> Extensions are responsible
43
+ * for ensuring that attack payloads are suitably encoded within requests
44
+ * (for example, by URL-encoding relevant metacharacters in the URL query
45
+ * string). Encoding is not automatically carried out by the
46
+ * <code>IScannerInsertionPoint</code>, because this would prevent Scanner
47
+ * checks from testing for certain input filter bypasses. Extensions should
48
+ * query the
49
+ * <code>IScannerInsertionPoint</code> to determine its type, and apply any
50
+ * encoding that may be appropriate.
51
+ *
52
+ * @param baseRequestResponse The base HTTP request / response that should
53
+ * be actively scanned.
54
+ * @param insertionPoint An
55
+ * <code>IScannerInsertionPoint</code> object that can be queried to obtain
56
+ * details of the insertion point being tested, and can be used to build
57
+ * scan requests for particular payloads.
58
+ * @return A list of
59
+ * <code>IScanIssue</code> objects, or
60
+ * <code>null</code> if no issues are identified.
61
+ */
62
+ List<IScanIssue> doActiveScan(
63
+ IHttpRequestResponse baseRequestResponse,
64
+ IScannerInsertionPoint insertionPoint);
65
+
66
+ /**
67
+ * The Scanner invokes this method when the custom Scanner check has
68
+ * reported multiple issues for the same URL path. This can arise either
69
+ * because there are multiple distinct vulnerabilities, or because the same
70
+ * (or a similar) request has been scanned more than once. The custom check
71
+ * should determine whether the issues are duplicates. In most cases, where
72
+ * a check uses distinct issue names or descriptions for distinct issues,
73
+ * the consolidation process will simply be a matter of comparing these
74
+ * features for the two issues.
75
+ *
76
+ * @param existingIssue An issue that was previously reported by this
77
+ * Scanner check.
78
+ * @param newIssue An issue at the same URL path that has been newly
79
+ * reported by this Scanner check.
80
+ * @return An indication of which issue(s) should be reported in the main
81
+ * Scanner results. The method should return
82
+ * <code>-1</code> to report the existing issue only,
83
+ * <code>0</code> to report both issues, and
84
+ * <code>1</code> to report the new issue only.
85
+ */
86
+ int consolidateDuplicateIssues(
87
+ IScanIssue existingIssue,
88
+ IScanIssue newIssue);
89
+ }