#3564: Inconsistent results from qsort callback in g.mkfontcap ----------------------+---------------------------- Reporter: yugr | Owner: grass-dev@… Type: defect | Status: new Priority: normal | Milestone: 7.6.0 Component: Default | Version: 7.4.0 Resolution: | Keywords: qsort callback CPU: All | Platform: All ----------------------+---------------------------- Changes (by mmetz):
* keywords: => qsort callback * milestone: => 7.6.0 Comment: Replying to [ticket:3564 yugr]: > Hi, > > qsort callback compare_fonts in g.mkfontcap may return invalid result when arguments are swapped. Such bugs may causes inconsistent order or even crashes in some qsort implementations (https://bugzilla.samba.org/show_bug.cgi?id=3959). > > The issue has been detected when running standard testsuite under SortChecker? (https://github.com/yugr/sortcheck): > > g.mkfontcap[15109]: qsort: comparison function is not symmetric (comparison function 0x4023c0 (/build/grass-7.0.3/dist.x86_64-pc-linux- gnu/bin/g.mkfontcap+0x4023c0), called from 0x4017a8 (/build/grass-7.0.3/dist.x86_64-pc-linux-gnu/bin/g.mkfontcap+0x4017a8), cmdline is "/build/grass-7.0.3/dist.x86_64-pc-linux-gnu/bin/g.mkfontcap -s") > > Problem is in lines > if (aa->type != bb->type) > return (aa->type > bb->type); > which should be replaced with something like > if (aa->type != bb->type) > return (aa->type > bb->type) ? 1 : -1; Fixed in trunk r72727. > > As a side note, many qsort callbacks in Grass are vulnerable to integer overflows e.g. cmp_edge in ./lib/vector/neta/spanningtree.c: > > return ((edge_cost_pair *) pa)->cost - ((edge_cost_pair *) pb)->cost; > Fixed in trunk r72728. > or longcmp in ./raster/r.kappa/prt_mat.c: > > return (*a - *b); Fixed in trunk r72729. > > and many many others. If you already have a list of these many other problems, can you provide such a list? That would be very helpful. -- Ticket URL: <https://trac.osgeo.org/grass/ticket/3564#comment:1> GRASS GIS <https://grass.osgeo.org>
_______________________________________________ grass-dev mailing list grass-dev@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/grass-dev