NJU-ProjectN / navy-apps

12 stars 14 forks source link

libbdf里的BDF_Font::create()是否预设了某条件 #15

Open czlx-github opened 3 months ago

czlx-github commented 3 months ago

该函数里这段代码:int x1 = x - bbx[2];,假设了BDF字体的原点(注意不是字体的原点左上角)横坐标总是和整个字体位图的左边框重合,即总为0? 根据提供的bdf文件的FONTBOUNDINGBOX的确是这样。 但根据BDF字体的规范,这样则是不一定对的,请参考规范里面提到的字体"j".

sashimi-yzh commented 3 months ago

这部分代码是另一位维护者在2017年的时候编写的, 当时估计没有仔细核对是否符合规范, 如果你有时间的话, 是否能请你提供一版符合规范的代码?

czlx-github commented 3 months ago

我的水平也不够解决这个问题😟。那就让这个issue开着,让有缘人修复这个bug吧(说不定秋季南大就有学生能够修复😂)。

czlx-github commented 3 months ago

另外检测到如下情况: 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里面的问题,还是可能和系统有关?我尝试排查没找到原因。 H(AAN5JO7UIH4X }_%T5X1B

image

czlx-github commented 3 months ago

已查出第3点原因:自己的libminiSDL没有对越过边界时的情况进行检查从而导致内存访问越界。

sashimi-yzh commented 3 weeks ago

另外检测到如下情况: 1.既然PA提供了其它字体,那么menu也许有必要考虑下加载了其它字体的情况,目前版本的menu加载其它字体(比如Courier-12.bdf)时将显示得很奇怪,会越过屏幕边界。 2.bug:BDF_Font::BDF_Font()在打开的文件不存在时直接返回,但此时font实际上没有完成初始化,new BDF_Font()将能返回非空指针,接下来会UB。

  1. 这个问题不影响正确性, 就先不处理了, 交给用户来指定大小合适的字体
  2. 已在commit a1ca3b9806a6addca02b5495ee99aa5071074315 中修复