Source: imgui
Version: 1.79+ds-1
Severity: serious

Hi,

I tried to build an application that uses imgui, but it crashes
with a "Floating point exception".
Then I tried to build the examples included in the libimgui-dev package
and noticed that they crash as well in the same function.

Steps to reproduce:

$ mkdir /tmp/imgui
$ cp 
/usr/share/doc/libimgui-dev/examples/{example_null/main.cpp,imgui_impl_opengl3.*}
 /tmp/imgui/
$ cd /tmp/imgui
$ g++ main.cpp imgui_impl_opengl3.cpp $(pkg-config imgui glew stb --cflags 
--libs)
$ ./a.out
Floating point exception
$ gdb ./a.out

(gdb) run
Starting program: /tmp/imgui/a.out

Program received signal SIGFPE, Arithmetic exception.
0x00007ffff7e2773f in stbrp__skyline_find_best_pos (height=64, width=64, 
c=0x55555560fbb0) at stb_rect_pack.c:350
350     stb_rect_pack.c: No such file or directory.
(gdb) bt
#0  0x00007ffff7e2773f in stbrp__skyline_find_best_pos (height=64, width=64, 
c=0x55555560fbb0) at stb_rect_pack.c:350
#1  stbrp__skyline_pack_rectangle (height=64, width=65, context=0x55555560fbb0) 
at stb_rect_pack.c:447
#2  stbrp_pack_rects (context=0x55555560fbb0, rects=0x55555560fde0, 
num_rects=2) at stb_rect_pack.c:563
#3  0x0000555555596563 in ImFontAtlasBuildPackCustomRects(ImFontAtlas*, void*) 
()
#4  0x00005555555999e8 in ImFontAtlasBuildWithStbTruetype(ImFontAtlas*) ()
#5  0x000055555559a53f in ImFontAtlas::GetTexDataAsAlpha8(unsigned char**, 
int*, int*, int*) ()
#6  0x000055555559a5f5 in ImFontAtlas::GetTexDataAsRGBA32(unsigned char**, 
int*, int*, int*) ()
#7  0x0000555555557e15 in main ()
(gdb) p *c
$1 = {
  width = 511,
  height = 32767,
  align = 0,
  init_mode = 0,
  heuristic = 0,
  num_nodes = 21845,
  active_head = 0x211,
  free_head = 0x7ffff7ab1be0 <main_arena+96>,
  extra = {{
      x = 7136,
      y = 63403,
      next = 0x0
    }, {
      x = 0,
      y = 0,
      next = 0x41077b4210bb410f
    }}
}


stb_rect_pack.h from libstb-dev (0.0~git20200713.b42009b-1) contains the
function stbrp__skyline_find_best_pos:

   static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, int 
width, int height)
   {
   ...
     width -= width % c->align;


As seen above in gdb, c->align is 0, so this line will cause a division by zero,
which triggers the exception.

I'm not sure if the problem is really in imgui which does not initialize the
stb context properly, or if it's a problem in libstb.

Kind regards,
  Reiner

Attachment: signature.asc
Description: PGP signature

Reply via email to