Open czlx-github opened 3 months ago
这部分代码是另一位维护者在2017年的时候编写的, 当时估计没有仔细核对是否符合规范, 如果你有时间的话, 是否能请你提供一版符合规范的代码?
我的水平也不够解决这个问题😟。那就让这个issue开着,让有缘人修复这个bug吧(说不定秋季南大就有学生能够修复😂)。
另外检测到如下情况:
1.既然PA提供了其它字体,那么menu也许有必要考虑下加载了其它字体的情况,目前版本的menu加载其它字体(比如Courier-12.bdf)时将显示得很奇怪,会越过屏幕边界。
2.bug:BDF_Font::BDF_Font()
在打开的文件不存在时直接返回,但此时font实际上没有完成初始化,new BDF_Font()
将能返回非空指针,接下来会UB。
3.在使用ISA=native
加载Courier-10.bdf运行时,在我的系统上(VMware虚拟机),平均10次左右会稳定触发以下两个情况,不知是我实现的libminiSDL的问题(已写测试用例通过一些简单测试),还是libbdf里面的问题,还是可能和系统有关?我尝试排查没找到原因。
已查出第3点原因:自己的libminiSDL没有对越过边界时的情况进行检查从而导致内存访问越界。
另外检测到如下情况: 1.既然PA提供了其它字体,那么menu也许有必要考虑下加载了其它字体的情况,目前版本的menu加载其它字体(比如Courier-12.bdf)时将显示得很奇怪,会越过屏幕边界。 2.bug:
BDF_Font::BDF_Font()
在打开的文件不存在时直接返回,但此时font实际上没有完成初始化,new BDF_Font()
将能返回非空指针,接下来会UB。
该函数里这段代码:
int x1 = x - bbx[2];
,假设了BDF字体的原点(注意不是字体的原点左上角)横坐标总是和整个字体位图的左边框重合,即总为0? 根据提供的bdf文件的FONTBOUNDINGBOX
的确是这样。 但根据BDF字体的规范,这样则是不一定对的,请参考规范里面提到的字体"j".