Commit b3faeb3
committed
Ensure indirect function calls have the correct type.
Some HTSlib interfaces (notably kgetline(), kgetline2(),
hts_itr_querys() and hts_parse_region()) have function
callbacks that are intended to be generic, so the
function signatures include a `void *` for data to
be passed in. E.g. for kgetline() this would be the
FILE * or hFILE * to read. Historically they have
often been called with a function that has an explicit
type (e.g. FILE * for fgets() used with kgetline)
on the assumption that casting it to void * is harmless.
Unfortunately doing this is strictly undefined behaviour
and will fail in some conditions - for example if
compiling with control flow integrity turned on. Recent
versions of clang will also call this out when using
undefined behaviour sanitizer. The solution is to create
wrapper functions that do take a void *, and call the
intended function with suitable casts.
Some new interfaces are also added so that the
messy implementation details can be hidden away,
and the inputs can be better type checked. Hopefully
this should also allow the wrapper functions to be
inlined away.
* khgetline() to read lines from an hFILE * to a kstring.
* kfgetline() to read lines from a FILE * to a kstring.
* tbx_itr_querys1() to create a tabix iterator on a region.
Used to reimplement the existing tbx_itr_querys() macro.
* bcf_itr_querys1() to create a region iterator an a bcf file
Used to reimplement the existing bcf_itr_querys() macro.1 parent b13f80a commit b3faeb3
14 files changed
Lines changed: 97 additions & 15 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1022 | 1022 | | |
1023 | 1023 | | |
1024 | 1024 | | |
1025 | | - | |
| 1025 | + | |
1026 | 1026 | | |
1027 | 1027 | | |
1028 | 1028 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1439 | 1439 | | |
1440 | 1440 | | |
1441 | 1441 | | |
1442 | | - | |
| 1442 | + | |
1443 | 1443 | | |
1444 | 1444 | | |
1445 | 1445 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
297 | 297 | | |
298 | 298 | | |
299 | 299 | | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
300 | 313 | | |
301 | 314 | | |
302 | 315 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
517 | 517 | | |
518 | 518 | | |
519 | 519 | | |
520 | | - | |
| 520 | + | |
521 | 521 | | |
522 | 522 | | |
523 | 523 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
249 | 249 | | |
250 | 250 | | |
251 | 251 | | |
252 | | - | |
253 | 252 | | |
254 | 253 | | |
255 | 254 | | |
| |||
259 | 258 | | |
260 | 259 | | |
261 | 260 | | |
262 | | - | |
| 261 | + | |
263 | 262 | | |
264 | 263 | | |
265 | 264 | | |
| |||
301 | 300 | | |
302 | 301 | | |
303 | 302 | | |
304 | | - | |
| 303 | + | |
305 | 304 | | |
306 | 305 | | |
307 | 306 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2027 | 2027 | | |
2028 | 2028 | | |
2029 | 2029 | | |
| 2030 | + | |
| 2031 | + | |
| 2032 | + | |
| 2033 | + | |
| 2034 | + | |
2030 | 2035 | | |
2031 | 2036 | | |
2032 | 2037 | | |
| |||
2038 | 2043 | | |
2039 | 2044 | | |
2040 | 2045 | | |
2041 | | - | |
| 2046 | + | |
2042 | 2047 | | |
2043 | 2048 | | |
2044 | 2049 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
211 | 211 | | |
212 | 212 | | |
213 | 213 | | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
214 | 227 | | |
215 | 228 | | |
216 | 229 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
129 | 129 | | |
130 | 130 | | |
131 | 131 | | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
132 | 136 | | |
133 | 137 | | |
134 | 138 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
61 | | - | |
| 61 | + | |
62 | 62 | | |
63 | 63 | | |
64 | 64 | | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
65 | 68 | | |
66 | 69 | | |
67 | 70 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1318 | 1318 | | |
1319 | 1319 | | |
1320 | 1320 | | |
1321 | | - | |
| 1321 | + | |
| 1322 | + | |
| 1323 | + | |
| 1324 | + | |
| 1325 | + | |
1322 | 1326 | | |
1323 | 1327 | | |
1324 | 1328 | | |
| |||
0 commit comments