목록

2026.09.04 21:01
조회 15
0
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 포맷이 아니라면 아예 실패 핸들러로 가야 할 것 같은데

    왜 성공 핸들러로 들어가서 오류를 일으키는지 의문이네요.

    제보 감사합니다.