JRuby Burp suite 확장 기능 개발 중 발생한 에러(failed to coerce [Lburp.IHttpRequestResponse; to burp.IHttpRequestResponse)

글 좀 쓰고 자려했는데, 잡다한 일이 꼬여.. 글은 패스하고 간단하게 메모 하나만 작성해둡니다.

어제 Burp 확장 기능을 만들던 중 이상한 에러를 하나 만났는데, 아래와 같습니다.

failed to coerce [Lburp.IHttpRequestResponse; to burp.IHttpRequestResponse

코드 구간은 이런 부분인데요, invocation(IHttpRequestResponse)가 Request/Response 데이터 재 사용을 위해 saveBuffersToTempFiles(IHttpRequestResponse) 함수를 통해 저장하는 과정에서 발생한 에러입니다. invocation의 type과 saveBuffersToTempFiles의 인자값 타입이 같은데 왜 에러가 나는지 이해가 가지 않는 상황이였죠.

def createMenuItems(invocation)
  ..생략..
  requestResponse = invocation.getSelectedMessages
  ..생략..
  Blahblah~~ @callbacks.saveBuffersToTempFiles(requestResponse) # I think, error in this line
end

그래서.. portswigger community에 올리고 트위터로 수소문하던중.. 어이없게 해결되어 버립니다. https://support.portswigger.net/customer/en/portal/questions/17364820-failed-to-coerce-lburp-ihttprequestresponse-to-burp-ihttprequestresponse?new=17364820

invocation으로 받은 IHttpRequestResponse는 여러개가 선택될 수 가능성을 가지기 때문에 기본이 배열 형태로 넘어오게 됩니다. 그래서 Type 에러가 발생한 것이고 앞단에 each do 로 하나씩 빼서 돌려주면 잘 돌아갑니다.

requestResponse = invocation.getSelectedMessages
requestResponse.each do | m |
blahblah~~~
end