@@ -42,8 +42,8 @@ class BookmarksPanel(private val callbacks: IBurpExtenderCallbacks) {
4242 val table = JTable (model)
4343
4444 private val messageEditor = MessageEditor (callbacks)
45- private val requestViewer: IMessageEditor ? = messageEditor.requestViewer
46- private val responseViewer: IMessageEditor ? = messageEditor.responseViewer
45+ val requestViewer: IMessageEditor ? = messageEditor.requestViewer
46+ val responseViewer: IMessageEditor ? = messageEditor.responseViewer
4747
4848 val panel = JSplitPane (JSplitPane .VERTICAL_SPLIT )
4949 val bookmarks = model.bookmarks
@@ -52,7 +52,7 @@ class BookmarksPanel(private val callbacks: IBurpExtenderCallbacks) {
5252
5353 init {
5454 BookmarkActions (this , bookmarks, callbacks)
55- val bookmarkOptons = BookmarkOptions (this , callbacks)
55+ val bookmarkOptions = BookmarkOptions (this , callbacks)
5656 table.autoResizeMode = JTable .AUTO_RESIZE_OFF
5757 table.columnModel.getColumn(0 ).preferredWidth = 30 // ID
5858 table.columnModel.getColumn(1 ).preferredWidth = 145 // date
@@ -68,12 +68,15 @@ class BookmarksPanel(private val callbacks: IBurpExtenderCallbacks) {
6868 table.columnModel.getColumn(11 ).preferredWidth = 50 // protocol
6969 table.columnModel.getColumn(12 ).preferredWidth = 80 // file
7070 table.columnModel.getColumn(13 ).preferredWidth = 120 // comments
71+ table.setSelectionMode(ListSelectionModel .SINGLE_SELECTION )
7172
7273 table.selectionModel.addListSelectionListener {
73- val requestResponse = bookmarks[table.selectedRow].requestResponse
74- messageEditor.requestResponse = requestResponse
75- requestViewer?.setMessage(requestResponse.request, true )
76- responseViewer?.setMessage(requestResponse.response ? : ByteArray (0 ), false )
74+ if (table.selectedRow != - 1 ) {
75+ val requestResponse = bookmarks[table.selectedRow].requestResponse
76+ messageEditor.requestResponse = requestResponse
77+ requestViewer?.setMessage(requestResponse.request, true )
78+ responseViewer?.setMessage(requestResponse.response ? : ByteArray (0 ), false )
79+ }
7780 }
7881
7982 val repeatPanel = JPanel (FlowLayout (FlowLayout .LEFT ))
@@ -94,7 +97,7 @@ class BookmarksPanel(private val callbacks: IBurpExtenderCallbacks) {
9497 JSplitPane (JSplitPane .VERTICAL_SPLIT , repeatPanel, reqResSplit)
9598
9699 val bookmarksOptSplit =
97- JSplitPane (JSplitPane .VERTICAL_SPLIT , bookmarkOptons .panel, bookmarksTable)
100+ JSplitPane (JSplitPane .VERTICAL_SPLIT , bookmarkOptions .panel, bookmarksTable)
98101
99102 panel.topComponent = bookmarksOptSplit
100103 panel.bottomComponent = repeatReqSplit
@@ -173,9 +176,11 @@ class BookmarksPanel(private val callbacks: IBurpExtenderCallbacks) {
173176 GlobalScope .launch(Dispatchers .IO ) {
174177 val requestResponse = callbacks.makeHttpRequest(messageEditor.httpService, requestViewer?.message)
175178 withContext(Dispatchers .Swing ) {
176- responseViewer?.setMessage(requestResponse.response, false )
177- if (repeatInTable.isSelected) {
178- createBookmark(requestResponse, repeated = true , proxyHistory = false )
179+ SwingUtilities .invokeLater {
180+ responseViewer?.setMessage(requestResponse.response, false )
181+ if (repeatInTable.isSelected) {
182+ createBookmark(requestResponse, repeated = true , proxyHistory = false )
183+ }
179184 }
180185 }
181186 }
0 commit comments