If I run this with the -O0 build it never ever reaches
  OpenSP::Vector<OpenJade_DSSSL::ProcessingMode::Rule*>::erase
So the code is still broken, but we just don't reach it.
-O0 isn't even a good mitigation.

Tracking the root cause further.

Very late in the -O0 build it then hits it like:
::erase (this=0xaaaaab027250, p1=0xaaaaaaeb5cf0, p2=0xaaaaaaeb5cf8)
::erase (this=0xaaaaab46cf10, p1=0xaaaaab883120, p2=0xaaaaab883128)
...
All that looks reasonable.
The other call we see in -O2 builds is broken:
::erase (p1=0x1, p2=0x2, ...

But this is actually a header in: src:opensp

Defines in
/usr/include/OpenSP/Vector.cxx:331

for (const T *p = p1; p != p2; p++)
  # works on pointer p

But for any type that does not surely increase the right way.
E.g. p1 = 0x1, p2 = 0x2 but increment = 4 (due to pointer arithmetic)
Then it will increment p forever.

If we use <= it will stop as soon as we would run over.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1869734

Title:
  openjade segfaults on arm (due to gcc optimization)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/openjade/+bug/1869734/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to