ebandal / H2Orestart

한컴파일을 LibreOffice에서 읽을 수 있도록 하는 extension입니다.
GNU General Public License v3.0
75 stars 6 forks source link

특정 HWP 파일 열기시 충돌이슈 #15

Closed marunguy closed 4 months ago

marunguy commented 7 months ago

특정 HWP 파일 열기시 libreoffice 가 충돌을 일으키면서 종료됩니다. 덤프파일 분석해보니 스택버퍼오버런 예외로 인한 충돌상황입니다.

충돌을 일으키는 HWP 파일은 제공하기 어려운 상황입니다. DEBUG 레벨 로그메시지를 수집, 제공할 경우 이 충돌상황을 해결할 수 있을까요?

아래는 import_0.log 내용과 충돌시 호출스택입니다.

ebandal commented 6 months ago

우선 답변이 늦어 미안합니다. 결론부터 말씀드리면, 원본 hwp파일이 없이는 원인 파악이 어렵습니다.

extension은 java로 만들었고 java는 오류시 exception을 발생합니다만, 본 이슈는 libreoffice 프로세스에서 발생한거라 java단에서 파악할수 있는 내용이 아닙니다. 물론 java단 호출에서 원인을 찾아야하겠으나, 제 github활동은 후순위라 얼마나 시간과 자원을 투입할수 있을지 약속드릴수가 없습니다. 예상컨대 원본hwp없이는 개선이 불가능할것 같습니다.

marunguy commented 5 months ago

답변 확인 많이 늦어서 미안합니다.

공개적으로 원본hwp 파일을 업로드하는 것은 어렵고 이메일 등을 통해 별도로 제공하고자 하는데 괜찮을까요?

괜찮다면 원하는 방법을 알려주면 고맙겠습니다.

ebandal commented 5 months ago

이메일로 원본hwp 첨부하여 보내주시면 분석하여 개선하겠습니다. 이메일로 전달하시는 hwp파일은 분석 목적으로만 사용하고, 외부에 공개하지 않겠습니다. 제 이메일은 ebandal@gmail.com 입니다. 감사합니다.

ebandal commented 5 months ago

확인해보니 19번 문단스타일에서 margin next값이 음수이고, 이 스타일의 문단을 쓸때 Exception 발생합니다.

            <hh:paraPr id="19" tabPrIDRef="0" condense="0" fontLineHeight="0" snapToGrid="0" suppressLineNumbers="0" checked="0">
                <hh:align horizontal="LEFT" vertical="BASELINE"/>
                <hh:heading type="NONE" idRef="0" level="0"/>
                <hh:breakSetting breakLatinWord="KEEP_WORD" breakNonLatinWord="BREAK_WORD" widowOrphan="0" keepWithNext="0" keepLines="0" pageBreakBefore="0" lineWrap="BREAK"/>
                <hh:autoSpacing eAsianEng="0" eAsianNum="0"/>
                <hp:switch>
                    <hp:case hp:required-namespace="http://www.hancom.co.kr/hwpml/2016/HwpUnitChar">
                        <hh:margin>
                            <hc:intent value="0" unit="HWPUNIT"/>
                            <hc:left value="0" unit="HWPUNIT"/>
                            <hc:right value="0" unit="HWPUNIT"/>
                            <hc:prev value="0" unit="HWPUNIT"/>
                            <hc:next value="-131072" unit="HWPUNIT"/>
                        </hh:margin>
                        <hh:lineSpacing type="PERCENT" value="160" unit="HWPUNIT"/>
                    </hp:case>
                    <hp:default>
                        <hh:margin>
                            <hc:intent value="0" unit="HWPUNIT"/>
                            <hc:left value="0" unit="HWPUNIT"/>
                            <hc:right value="0" unit="HWPUNIT"/>
                            <hc:prev value="0" unit="HWPUNIT"/>
                            <hc:next value="-262144" unit="HWPUNIT"/>
                        </hh:margin>
                        <hh:lineSpacing type="PERCENT" value="160" unit="HWPUNIT"/>
                    </hp:default>
                </hp:switch>
                <hh:border borderFillIDRef="1" offsetLeft="0" offsetRight="0" offsetTop="0" offsetBottom="0" connect="0" ignoreMargin="0"/>
            </hh:paraPr>

어떻게 예외처리를 할지 고려해보겠습니다.

ebandal commented 5 months ago

버전 v0.6.0 에서 margin값이 음수여도 crash 발생하지 않도록 수정했습니다. 감사합니다.

marunguy commented 5 months ago

감사합니다. 정상적으로 잘 열립니다.