| CMS/프레임워크 | Rhymix 2.1 |
|---|---|
| 개발 언어 | PHP 8.4 |
해당 내용은 AI가 서드파티 라이믹스1 시절에 만든 애드온의 기능을 수정하면서 발견한 오류를 수정하고
해결하면서 관련 문제라고 보고 받은 내용이라 적습니다.
깃헙에는 Ai작성글은 QNA를 통해 문의하라는 내용을 확인하여 QNA에 일단 남겨봅니다.
### 증상
addon에서 `exit()`/`die()`를 응답 내용 없이 호출하면(예: before_module_proc 훅에서 검증 실패 시
setError()/setMessage()만 하고 exit() 호출, echo/print 없이), 서버는 완전히 빈(0바이트) 응답을 보냅니다.
클라이언트는 이 빈 응답을 jQuery의 dataType:"json"으로 파싱하면서 `data`가 null이 되는데,
common.js / xml_handler.js의 AJAX 성공 핸들러가 이를 체크하지 않고 바로 접근합니다.
- common/js/common.js
- common/js/xml_handler.js
두 파일 모두 다음과 같은 코드가 있습니다:
if (data._rx_debug) {
data._rx_debug.page_title = "AJAX : " + ...
...
}
`data`가 null이면 여기서 "Cannot read properties of null (reading '_rx_debug')" 형태의
TypeError가 발생하고, 이후 처리(에러 메시지 표시, 리다이렉트 등)가 전혀 실행되지 않습니다.
사용자 입장에서는 버튼을 눌러도 아무 반응이 없는 것처럼 보입니다.
### 재현 방법
1. 임의의 addon을 before_module_proc 등에서 훅
2. 검증 실패 조건에서 아무 출력 없이 exit() 호출
3. 클라이언트에서 해당 act를 exec_json 등으로 호출 → 빈 응답 수신 → 콘솔에 TypeError
### 근본 원인
서드파티 addon이 응답 규약을 어기고 빈 응답을 보내는 것 자체는 addon의 버그이지만,
코어의 AJAX 응답 처리 코드가 이런 상황에 대해 방어적이지 않아서 조용히 죽어버리는 게 문제입니다.
플러그인 구조상 코어는 addon이 항상 올바른 응답을 보낸다고 가정하면 안 된다고 생각합니다.
### 제안하는 수정
common.js, xml_handler.js에서 `data._rx_debug` 접근 전에 null 체크만 추가하면 됩니다.
if (data && data._rx_debug) {
...
}
이렇게 하면 응답이 비어있는 경우에도 최소한 조용히 죽지 않고, 정상적으로 에러 처리 흐름을 타게 됩니다.
루딩
Lv. 1
댓글 1
음.. 응답이 json 포맷이 아니라면 아예 실패 핸들러로 가야 할 것 같은데
왜 성공 핸들러로 들어가서 오류를 일으키는지 의문이네요.
제보 감사합니다.