Tested:
Before:
```
$ IMLIB2_LOADER_PATH=../src/modules/loaders/.libs ./test_load_2
...
[ RUN ] LOAD2.load_1
test_load_2.cpp:121: Failure
Expected equality of these values:
crc
Which is: 671661664
tii[i].crc
Which is: 4016720483
test_load_2.cpp:128: Failure
Expected equality of these values:
crc
Which is: 671661664
tii[i].crc
Which is: 4016720483
test_load_2.cpp:135: Failure
Expected equality of these values:
crc
Which is: 671661664
tii[i].crc
Which is: 4016720483
[ FAILED ] LOAD2.load_1 (70 ms)
...
```
After:
```
$ IMLIB2_LOADER_PATH=../src/modules/loaders/.libs ./test_load_2
...
test_load_2.cpp:122: Failure
Expected equality of these values:
crc
Which is: 671661664
tii[i].crc
Which is: 4016720483
wrong crc file: ./images/icon-64.xpm expected: 4016720483 actual: 671661664
test_load_2.cpp:131: Failure
Expected equality of these values:
crc
Which is: 671661664
tii[i]. crc
Which is: 4016720483
wrong crc file: ./images/icon-64.xpm expected: 4016720483 actual: 671661664
test_load_2.cpp:142: Failure
Expected equality of these values:
crc
Which is: 671661664
tii[i]. crc
Which is: 4016720483
wrong crc file: ./images/icon-64.xpm expected: 4016720483 actual: 671661664
[ FAILED ] LOAD2.load_1 (69 ms)
...
```
Prepared using:
```
$ ffmpeg -i test/images/icon-64.png -pix_fmt yuv420p test/images/icon-64.yuv420p.y4m
...
$ ffmpeg -i test/images/icon-64.png -pix_fmt yuv422p test/images/icon-64.yuv422p.y4m
...
$ ffmpeg -i test/images/icon-64.png -pix_fmt yuv444p test/images/icon-64.yuv444p.y4m
...
```
Tested:
(1) correct y4m files
```
$ LD_LIBRARY_PATH=~/proj/imlib2/src/lib/.libs/:${LD_LIBRARY_PATH} IMLIB2_MODULE_PATH=~/proj/imlib2/src/modules/loaders/.libs/ valgrind --leak-check=yes /bin/feh ~/proj/imlib2/test/images/icon-*y4m
==391567== Memcheck, a memory error detector
==391567== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==391567== Using Valgrind-3.20.0 and LibVEX; rerun with -h for copyright info
==391567== Command: /bin/feh /home/chemag/proj/imlib2/test/images/icon-64.yuv420p.y4m /home/chemag/proj/imlib2/test/images/icon-64.yuv422p.y4m /home/chemag/proj/imlib2/test/images/icon-64.yuv444p.y4m
==391567==
==391567==
==391567== HEAP SUMMARY:
==391567== in use at exit: 297,719 bytes in 1,018 blocks
==391567== total heap usage: 5,151 allocs, 4,133 frees, 871,023 bytes allocated
==391567==
==391567== LEAK SUMMARY:
==391567== definitely lost: 0 bytes in 0 blocks
==391567== indirectly lost: 0 bytes in 0 blocks
==391567== possibly lost: 0 bytes in 0 blocks
==391567== still reachable: 295,703 bytes in 997 blocks
==391567== suppressed: 0 bytes in 0 blocks
==391567== Reachable blocks (those to which a pointer was found) are not shown.
==391567== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==391567==
==391567== For lists of detected and suppressed errors, rerun with: -s
==391567== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
```
(2) broken y4m file
Prepared by copying test/images/icon-64.yuv420p.y4m and replacing the "C420jpeg" item in the first line with "Cfoo" (invalid color space).
```
$ LD_LIBRARY_PATH=~/proj/imlib2/src/lib/.libs/:${LD_LIBRARY_PATH} IMLIB2_MODULE_PATH=~/proj/imlib2/src/modules/loaders/.libs/ valgrind --leak-check=yes /bin/feh ~/proj/imlib2/icon-64.yuv420p.y4m
==391699== Memcheck, a memory error detector
==391699== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==391699== Using Valgrind-3.20.0 and LibVEX; rerun with -h for copyright info
==391699== Command: /bin/feh /home/chemag/proj/imlib2/icon-64.yuv420p.y4m
==391699==
liby4m: Unrecognized colourspace foo
liby4m: Unable to read file's parameter list
liby4m: Failed to parse file header
***** Imlib2 Developer Warning ***** :
This program is calling the Imlib call:
imlib_image_set_changes_on_disk();
With the parameter:
image
being NULL. Please fix your program.
***** Imlib2 Developer Warning ***** :
This program is calling the Imlib call:
imlib_image_get_width();
With the parameter:
image
being NULL. Please fix your program.
***** Imlib2 Developer Warning ***** :
This program is calling the Imlib call:
imlib_image_get_height();
With the parameter:
image
being NULL. Please fix your program.
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 1 (X_CreateWindow)
Value in failed request: 0x0
Serial number of failed request: 15
Current serial number in output stream: 16
==391699==
==391699== HEAP SUMMARY:
==391699== in use at exit: 303,880 bytes in 2,116 blocks
==391699== total heap usage: 3,405 allocs, 1,289 frees, 670,313 bytes allocated
==391699==
==391699== LEAK SUMMARY:
==391699== definitely lost: 0 bytes in 0 blocks
==391699== indirectly lost: 0 bytes in 0 blocks
==391699== possibly lost: 0 bytes in 0 blocks
==391699== still reachable: 301,864 bytes in 2,095 blocks
==391699== suppressed: 0 bytes in 0 blocks
==391699== Reachable blocks (those to which a pointer was found) are not shown.
==391699== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==391699==
==391699== For lists of detected and suppressed errors, rerun with: -s
==391699== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
```
When using imlib_create[_scaled]_image_from_drawable() with non-zero
source offsets the output image could contain pixels either not set or
copied from uninitialised parts of intermediary pixmap.
__imlib_FileCanRead() suffers from TOCTTOU issues. The file behind the
path it takes as a parameter can change while the function executes, and
also between the function's return and the caller's use of the path.
The function is also unused, so just delete it.
- Drop imlib_load_image_fde()
- Remove error_return from imlib_load_image_mem()
It is becoming somewhat messy having functions with and without error
returns, so drop error returns in API functions added since v1.9.1.
Use imlib_get_error() to get the error instead.
Some of the image loading functions have a version with an error_return,
and some not.
With imlib_get_error() it is now possible to fetch the load error for
any image loading function call.
When loading image from memory (imlib_load_image[_frame]_mem()) the
memory was unintentionally munmapped after loading.
This would cause trouble if loading multiple times from the same mmap'ed
memory, but not from malloced memory as the munmap would then just fail
silently.
old/legacy-imlib2#1