Commit Graph

194 Commits

Author SHA1 Message Date
Sean Barrett 4a1523f60a make tga load function static to avoid link errors on multiple instances 2016-12-04 05:28:26 -08:00
Sean Barrett 7759a2a93d fix "misleading indentation" gcc warning 2016-12-04 05:25:24 -08:00
Sean Barrett ae241feec4 Merge branch 'stb_img_overflows' of https://github.com/rygorous/stb into working
Conflicts:
	stb_image.h
2016-12-04 05:20:57 -08:00
Sean Barrett 7736399517 return 16-bit PSDs through 16-bit API (untested) 2016-12-04 05:13:58 -08:00
Sean Barrett e0700d8e2c 16-bit png changes 2016-11-29 04:13:17 -08:00
Sean Barrett 239a6718e1 rename stbi_load parameters to reduce confusion 2016-11-29 03:03:07 -08:00
Fabian Giesen 6b66033e18 stb_image: Fix memory leak and missing out-of-mem check.
stbi__process_frame_header had two bugs when dealing with progressive
JPEGs:
1. when malloc failed allocating raw_data, previous components'
   raw_coeff didn't get freed
2. no out-of-memory check in raw_coeff allocation

Fix both and share a bit more cleanup code in general.
2016-10-22 00:29:37 -07:00
Fabian Giesen 62f372754f stb_image: Fix HDR/PSD RLE decoders.
Runs need to be bounds checked.

Fixes issues #315, #317.
2016-10-22 00:29:37 -07:00
Fabian Giesen 02190634c2 stb_image: Overflow checking for image allocs.
Adds some helpers that check whether a product of multiple
factors (that need to be non-negative: this is enforced)
summed with another non-negative value overflows when
performed as int. Since stb_image mostly works in ints,
this seems like the safest route. Limits size of images
to 2GB but several of the decoders already enforce this
limit (or even lower ones).

Also adds wrappers for malloc that combine a mul-add-with-
overflow-check with the actual malloc, and return NULL
on failure. Then use them when allocating something that
is the product of multiple factors.

For image formats, also add a top-level "is this too big?"
check that gives a more useful error message; otherwise,
the failed mallocs result in an "out of memory" error.
The idea is that the top-level checks should be the primary
way to catch these bugs (and produce a useful error message).
But a misleading error message is still vastly preferable to
a buffer overflow exploit.

Fixes issues #310, #313, #314, #318. (Verified with the
provided test images)

Along the way, this fixes a previously unnoticed bug in
ldr_to_hdr / hdr_to_ldr (missing NULL check); these functions
are called with the result of an image decoder, so NULLs can
definitely happen.

Another bug noticed along the way is that handling of
interlaced 16-bit PNGs was incorrect. Fixing this (along
with the previous modifications) fixes issue #311.

Yet another bug noticed during this change is that reduce_png
did not check the right pointer during its out of memory
check. Fix that too.
2016-10-22 00:29:37 -07:00
Fabian Giesen 8c8d735eb7 stb_image: More input validation in deflate decoder
Fixes issue #312.
2016-10-22 00:29:37 -07:00
Sean Barrett fdca443892 fix crash in 2.11 2016-04-02 07:29:34 -07:00
Sean Barrett 6e4154737c update version numbers, documentation, and contributors 2016-04-02 04:51:26 -07:00
Sean Barrett 7a694bdcca re-enable SSE2 code on x64 except with gcc 2016-04-02 04:01:59 -07:00
Sean Barrett 201af99d9f return correct # of channels for PNG 2016-04-02 03:49:46 -07:00
Sean Barrett 591c7f8cb3 remove white matting when loading transparent PSD 2016-04-02 03:44:50 -07:00
Sean Barrett c03f4b3c2f Merge branch 'patch-1' of https://github.com/kinetiknz/stb 2016-04-02 02:57:34 -07:00
Sean Barrett 097a70ae38 Merge branch 'master' of https://github.com/tulrich/stb 2016-04-02 02:56:39 -07:00
Sean Barrett a013c036f3 initialize bmp mr/mg/mb/ma properly 2016-04-02 02:54:25 -07:00
Sean Barrett 406d537b41 Merge branch 'initial_png_16bpc' of https://github.com/socks-the-fox/stb into working 2016-04-02 02:41:16 -07:00
Sean Barrett efdfbb3c7c Merge branch 'master' into working 2016-04-01 21:43:22 -07:00
Sean Barrett 50479cb07c stb_image: allow jpegs that are rgb not YCrCb 2016-03-26 15:46:59 -07:00
Matthew Gregan 94f2ceac15 Fix typo in stbi__parse_uncompressed_block 2016-03-12 01:55:59 +13:00
Thatcher Ulrich 7e1ee2d386 Allocate large structure using malloc instead of stack. 2016-03-02 15:56:53 -05:00
Thatcher Ulrich 291ad22e84 Replace large stack allocations with dynamic allocations. 2016-03-02 15:31:07 -05:00
Craig Donner ee6978cb68 Slightly modify the public domain license to keep it in the public domain, but make it clear that even when dedications might not be recognized that the code is still usable. Given that this isn't dual-licensing under a different license, I'm hoping this will be acceptable. 2016-02-25 12:55:44 -08:00
Socks the Fox eb84b2179b Initial 16 bit per channel PNG support 2016-01-22 12:42:40 -06:00
Sean Barrett 30015ef464 attempt to fix unused var warnings in stb_image 2.09 2016-01-22 04:06:28 -08:00
Sean Barrett 472c4c82a4 update version history 2016-01-16 10:00:19 -08:00
Sean Barrett ac748cba9b update contributor list, version history, version number 2016-01-16 09:57:04 -08:00
Sean Barrett 82ca643ef3 change previous explicitly-sized realloc support to be new API and unbreak old API 2016-01-16 09:47:22 -08:00
Sean Barrett 853fda6132 Merge branch 'alt_realloc' of https://github.com/romigrou/stb into working 2016-01-16 09:38:13 -08:00
Sean Barrett c8e50127c5 contributor list 2016-01-16 09:37:34 -08:00
Sean Barrett 32d5e7ca7f Merge branch '16bit-tga' of https://github.com/DanielGibson/stb into working 2016-01-16 08:15:58 -08:00
Sean Barrett 9cb29b6b39 update and reorganize contributor list 2016-01-16 08:13:55 -08:00
Sean Barrett 5746aa023a Merge branch 'stbi_hdr_info_overread' of https://github.com/baldurk/stb into working 2016-01-16 08:05:51 -08:00
Sean Barrett e30b75af8b update contributor list 2016-01-16 08:05:40 -08:00
Sean Barrett c7e24f4c4c Merge branch 'master' of https://github.com/svdijk/stb into working 2016-01-16 08:03:22 -08:00
Sean Barrett 1964d53d70 update version number and version history with everything committed to date 2016-01-16 08:01:42 -08:00
Romain Bailly 7e741ffc1e Added the old size as argument to the STBI_REALLOC() and STBIW_REALLOC() macros 2016-01-14 10:34:30 +01:00
Daniel Gibson 87a0396922 stb_image.h: 16 bit TGAs don't really have an alpha channel
I claimed that if the most significant bit of a 16bit pixel is set,
it should be opaque (as is suggested by some sources on the internet),
but implemented the opposite.
If implemented "correctly", lots of 16bit TGAs become invisible.. so I
guess 16bit TGAs aren't really supposed to have an alpha-channel, or at
least most 16bit TGAs (despite having set an "alpha-bit" in the "image
descriptor byte") in the wild don't seem to work like that.

So just assume 16bit non-greyscale TGAs are always STBI_rgb without
an alpha channel.
2015-12-06 05:47:47 +01:00
Daniel Gibson d235049322 stb_image.h: Fix TGA colormap support
* Calculate correct stb format (incl. proper 16bit support) also when
  using a colormap (palette)
* Create colormap with tga_comp, to correctly support 16bit RGB
  (instead of using tga_palette_bits/8 and just copying the data)
* For TGAs with colormap, the TGA bits per pixel field specifies the
  size of an index to the colormap - the "real" color depth
  of the image is saved in the color map specification's bits per pixel
  field. I think only 8 and 16bit indices make sense (16 should be
  supported, otherwise the colormap length could be u8 instead of u16),
  so I added support for both.
* Helper functions stbi__tga_get_comp() to calculate stb pixelformat and
  stbi__tga_read_rgb16() to read one 16bit pixel and convert it to
  24/32bit RGB(A) - for less duplicate code
2015-12-06 04:33:37 +01:00
Daniel Gibson 57409c3d15 stb_image.h: Improve stbi__tga_info() and stbi__tga_test()
* for paletted images, .._info()'s comp should be based on the palette's
  bits per pixel, not the images bits per pixel (which describes the
  size of an index into the palette and is also checked now)
* make sure the color (map) type and the image type fields of the header
  are consistent (=> if TGA color type is 1 for paletted, the TGA image
  type must be 1 or 9)
* .._test() does some more checks and uses stbi__get16le() instead of
  stbi__get16be() - TGA is little endian.
* .._test() now always rewinds (sometimes it used to do only return 0;
  without rewinding)
* remove "error check" at the beginning of stbi__tga_load(), because
  all that is already tested in stbi__tga_test()
2015-12-06 04:33:30 +01:00
Daniel Gibson 7453e1bfa4 stb_image.h: Support 15/16bit per pixel RGB(A) TGAs
stbi__tga_* assumed that 16bit TGAs were Grayscale + Alpha.
However, if the TGA imagetype is not one of the gray ones, it's 16Bit
RGB data, with 5 Bits per channel. If the TGA image descriptor field
has alpha bits (the 3 least significant ones) set, the pixel's most
significant bit is for alpha: 1 for opaque and 0 for translucent.
Furthermore people claim that TGAs can also pretend to have 15bpp,
which is the same as 16bpp but definitely without alpha.

So 15/16bpp TGAs are now decoded to STBI_rgb(_alpha).
2015-12-06 00:25:22 +01:00
baldurk 4337345c5d Prevent HDR info function from trashing stbi context by over-reading 2015-11-14 13:14:26 +01:00
Sean Barrett 297ff62859 change bmp info to use common header parser 2015-11-08 13:09:16 -08:00
Sean Barrett 876aea3dbe refactor bmp header parser for sharing with stbi_info 2015-11-08 01:22:30 -08:00
Sean Barrett 0615df6c9b allows comments in pgm/ppm headers 2015-11-08 00:45:17 -08:00
svdijk 9f1a587d22 stb_image.h: Fix/add some comments. 2015-11-05 23:34:44 +01:00
svdijk 8603c6e809 stb_image.h: Only define stbi__l2h_{gamme,scale} when needed.
This fixes a (well, actually the only) compiler warning.
2015-11-05 23:32:40 +01:00
Sean Barrett 6b8938124e Merge branch 'fix-vs2015-warnings' of https://github.com/Reedbeta/stb into working 2015-09-13 11:09:23 -07:00