{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":308137820,"defaultBranch":"main","name":"libjpeg-turbo","ownerLogin":"arthenica","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2020-10-28T20:50:52.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/113347484?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1716414066.0","currentOid":""},"activityList":{"items":[{"before":"9ddcae4a8f4aaa096ccdcddec36afc52fbc01481","after":"8db0312668f986891f65af9dbcc94e7e92ede099","ref":"refs/heads/main","pushedAt":"2024-08-04T20:40:02.000Z","pushType":"push","commitsCount":10,"pusher":{"login":"tanersener","name":"Taner Sener","path":"/tanersener","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10158439?s=80&v=4"},"commit":{"message":"example.c: Write correct dimensions to PPM header\n\nThe dimensions in the PPM header of the output file generated by\n'example decompress' were always 640 x 480, regardless of the size of\nthe JPEG image being decompressed. Our regression tests (which this\ncommit also fixes) missed the bug because they decompressed the\n640 x 480 image generated by 'example compress'.\n\nFixes #778","shortMessageHtmlLink":"example.c: Write correct dimensions to PPM header"}},{"before":"7fa4b5b762c9a99b46b0b7838f5fd55071b92ea5","after":"9ddcae4a8f4aaa096ccdcddec36afc52fbc01481","ref":"refs/heads/main","pushedAt":"2024-05-22T21:41:05.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"tanersener","name":"Taner Sener","path":"/tanersener","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10158439?s=80&v=4"},"commit":{"message":"jpeglib.h: Document the need to include stdio.h\n\nlibjpeg.txt documents the need to \"include system headers that define at\nleast the typedefs FILE and size_t\" before including jpeglib.h.\nHowever, some software developers unfortunately assume that any\ndownstream build failure is due to an upstream oversight (as if such an\noversight would have gone unnoticed for 14 years in a library as\nubiquitous as libjpeg-turbo) and \"come in hot\" with a proposal and\narguments that have already been carefully considered and rejected\nmultiple times (as opposed to grepping the documentation or searching\nexisting issues and PRs to find out whether the upstream behavior is\nintentional.)\n\nMultiple issues and PRs (including #17, #18, #116, #737, and #766) have\nbeen filed regarding this, so this commit adds a comment to jpeglib.h in\nthe hope of heading off future issues and PRs. I suspect that some\npeople will still choose to waste my time by arguing about it, even\nthough the decision was made by Tom Lane nearly 20 years before\nlibjpeg-turbo even existed, the decision was supportable based on the\nneeds of early 1990s computing systems, and reversing that decision\nwould break backward API compatibility (which is one of the reasons that\nmany downstream projects adopted libjpeg-turbo in the first place.) At\nleast now, if someone posts an issue or PR about this again, I can just\nlink to this commit and close the issue/PR without comment.","shortMessageHtmlLink":"jpeglib.h: Document the need to include stdio.h"}},{"before":"24e09baaf024e71841a92d30d0e763242ed959ef","after":"7fa4b5b762c9a99b46b0b7838f5fd55071b92ea5","ref":"refs/heads/main","pushedAt":"2024-05-07T23:24:35.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"tanersener","name":"Taner Sener","path":"/tanersener","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10158439?s=80&v=4"},"commit":{"message":"jerror.c: Silence MSan uninitialized value warning\n\nIf an error manager instance is passed to jpeg_std_error(), then its\nformat_message() method will point to the format_message() function in\njerror.c. The format_message() function passes all eight values from\nthe jpeg_error_mgr::msg_parm.i[] array as arguments to\nsnprintf()/_snprintf_s(), even if the format string doesn't use all of\nthose values. Subsequently invoking one of the ERREXIT[1-6]() macros\nwill leave the unused values uninitialized, and if the\n-fsanitize-memory-param-retval option (introduced in Clang 14) is\nenabled (which it is by default in Clang 16 and later), then MSan will\ncomplain when the format_message() function tries to pass the\nuninitialized-but-unused values as function arguments.\n\nThis commit modifies jpeg_std_error() so that it zeroes out the error\nmanager instance passed to it, thus working around the warning as well\nas simplifying the code.\n\nCloses #761","shortMessageHtmlLink":"jerror.c: Silence MSan uninitialized value warning"}},{"before":"6a522fcda46934b3dc2464114d1283f110105d5e","after":"24e09baaf024e71841a92d30d0e763242ed959ef","ref":"refs/heads/main","pushedAt":"2024-05-04T19:11:25.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"tanersener","name":"Taner Sener","path":"/tanersener","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10158439?s=80&v=4"},"commit":{"message":"Build: Add COMPONENT to all install() commands\n\nThis makes it possible for downstream packagers and other integrators of\nlibjpeg-turbo to include only specific directories from the\nlibjpeg-turbo installation (or to install specific directories under a\ndifferent prefix, etc.) The names of the components correspond to the\ndirectories into which they will be installed.\n\nRefer to libvips/libvips#3931, #265, #338\n\nCloses #756","shortMessageHtmlLink":"Build: Add COMPONENT to all install() commands"}},{"before":"2dfe6c0fe9e18671105e94f7cbf044d4a1d157e6","after":"6a522fcda46934b3dc2464114d1283f110105d5e","ref":"refs/heads/main","pushedAt":"2024-05-04T18:19:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"tanersener","name":"Taner Sener","path":"/tanersener","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10158439?s=80&v=4"},"commit":{"message":"jpegtran -drop: Ensure all quant tables defined\n\nIt is possible to craft a malformed JPEG image in which all of the\nscans contain fewer components than the number of components specified\nin the Start Of Frame (SOF) segment. Attempting to use such an image as\neither an input image or a drop image with 'jpegtran -drop' caused a\nNULL dereference and subsequent segfault in transupp.c:adjust_quant(),\nso this commit adds appropriate checks to guard against that.\n\nSince the issue involved an interface that is only exposed on the\njpegtran command line, it did not represent a security risk.\n'jpegtran -drop' could not ever be used successfully with images such as\nthe ones described above. This commit simply makes jpegtran fail\ngracefully rather than crash.\n\nFixes #758","shortMessageHtmlLink":"jpegtran -drop: Ensure all quant tables defined"}},{"before":"55d342c788b6eb6188789a52e24da44bbeb6fc60","after":"2dfe6c0fe9e18671105e94f7cbf044d4a1d157e6","ref":"refs/heads/main","pushedAt":"2024-04-07T22:40:07.000Z","pushType":"push","commitsCount":25,"pusher":{"login":"tanersener","name":"Taner Sener","path":"/tanersener","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10158439?s=80&v=4"},"commit":{"message":"CI: Work around segfaults in ASan/MSan jobs\n\nReferring to actions/runner-images#9491, the sanitizers in LLVM 14 that\nships with Ubuntu 22.04 are incompatible with high-entropy address space\nlayout randomization (ASLR), which is enabled in the GitHub runners via\ntheir use of a newer kernel than ubuntu 22.04 uses.","shortMessageHtmlLink":"CI: Work around segfaults in ASan/MSan jobs"}},{"before":"ec32420f6b5dfa4e86883d42b209e8371e55aeb5","after":"55d342c788b6eb6188789a52e24da44bbeb6fc60","ref":"refs/heads/main","pushedAt":"2023-11-19T15:30:00.000Z","pushType":"push","commitsCount":15,"pusher":{"login":"tanersener","name":"Taner Sener","path":"/tanersener","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10158439?s=80&v=4"},"commit":{"message":"TurboJPEG: Expose/extend hidden \"max pixels\" param\n\nTJPARAM_MAXPIXELS was previously hidden and used only for fuzz testing,\nbut it is potentially useful for calling applications as well,\nparticularly if they want to guard against excessive memory consumption\nby the tj3LoadImage*() functions. The parameter has also been extended\nto decompression and lossless transformation functions/methods, mainly\nas a convenience. (It was already possible for calling applications to\nimpose their own JPEG image size limits by reading the JPEG header prior\nto decompressing or transforming the image.)","shortMessageHtmlLink":"TurboJPEG: Expose/extend hidden \"max pixels\" param"}},{"before":"3d1d68cf967aec4aba34cd51e89a13fc2f0f3d9b","after":"ec32420f6b5dfa4e86883d42b209e8371e55aeb5","ref":"refs/heads/main","pushedAt":"2023-10-29T11:55:24.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"tanersener","name":"Taner Sener","path":"/tanersener","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10158439?s=80&v=4"},"commit":{"message":"example.c: Fix 12-bit PPM write w/ big endian CPUs","shortMessageHtmlLink":"example.c: Fix 12-bit PPM write w/ big endian CPUs"}},{"before":"2c97a1ff07ccffe7c4b6bc96c7a94afbc32c3575","after":"3d1d68cf967aec4aba34cd51e89a13fc2f0f3d9b","ref":"refs/heads/main","pushedAt":"2023-10-05T17:27:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"tanersener","name":"Taner Sener","path":"/tanersener","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10158439?s=80&v=4"},"commit":{"message":"README.md: Mention 4:4:0 math. incomp. vs. jpeg-6b\n\nlibjpeg-turbo implements 4:4:0 \"fancy\" (smooth) upsampling, which is\nenabled by default when decompressing JPEG images that use 4:4:0\nchrominance subsampling. libjpeg did not and does not implement fancy\n4:4:0 upsampling.","shortMessageHtmlLink":"README.md: Mention 4:4:0 math. incomp. vs. jpeg-6b"}},{"before":"c0412b56d66b287817009afca7c105feb674cd7c","after":"2c97a1ff07ccffe7c4b6bc96c7a94afbc32c3575","ref":"refs/heads/main","pushedAt":"2023-10-03T22:05:58.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"tanersener","name":"Taner Sener","path":"/tanersener","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10158439?s=80&v=4"},"commit":{"message":"GitHub: Use Ubuntu 20.04 runner for x32 build/test\n\nThe Ubuntu 22.04 kernel no longer supports the x32 ABI.","shortMessageHtmlLink":"GitHub: Use Ubuntu 20.04 runner for x32 build/test"}},{"before":"9b704f96b2dccc54363ad7a2fe8e378fc1a2893b","after":"c0412b56d66b287817009afca7c105feb674cd7c","ref":"refs/heads/main","pushedAt":"2023-09-15T21:27:50.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"tanersener","name":"Taner Sener","path":"/tanersener","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10158439?s=80&v=4"},"commit":{"message":"ChangeLog.md: List CVE ID fixed by ccaba5d7\n\nCloses #724","shortMessageHtmlLink":"ChangeLog.md: List CVE ID fixed by ccaba5d"}},{"before":"7b844bfda67f68b7bd61a6394815b5a1628ee096","after":"9b704f96b2dccc54363ad7a2fe8e378fc1a2893b","ref":"refs/heads/main","pushedAt":"2023-08-26T08:03:25.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"tanersener","name":"Taner Sener","path":"/tanersener","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10158439?s=80&v=4"},"commit":{"message":"Fix block smoothing w/vert.-subsampled prog. JPEGs\n\nThe 5x5 interblock smoothing implementation, introduced in libjpeg-turbo\n2.1, improperly extended the logic from the traditional 3x3 smoothing\nimplementation. Both implementations point prev_block_row and\nnext_block_row to the current block row when processing, respectively,\nthe first and the last block row in the image:\n\n if (block_row > 0 || cinfo->output_iMCU_row > 0)\n prev_block_row =\n buffer[block_row - 1] + cinfo->master->first_MCU_col[ci];\n else\n prev_block_row = buffer_ptr;\n\n if (block_row < block_rows - 1 ||\n cinfo->output_iMCU_row < last_iMCU_row)\n next_block_row =\n buffer[block_row + 1] + cinfo->master->first_MCU_col[ci];\n else\n next_block_row = buffer_ptr;\n\n6d91e950c871103a11bac2f10c63bf998796c719 naively extended that logic to\naccommodate a 5x5 smoothing window:\n\n if (block_row > 1 || cinfo->output_iMCU_row > 1)\n prev_prev_block_row =\n buffer[block_row - 2] + cinfo->master->first_MCU_col[ci];\n else\n prev_prev_block_row = prev_block_row;\n\n if (block_row < block_rows - 2 ||\n cinfo->output_iMCU_row + 1 < last_iMCU_row)\n next_next_block_row =\n buffer[block_row + 2] + cinfo->master->first_MCU_col[ci];\n else\n next_next_block_row = next_block_row;\n\nHowever, this new logic was only correct if block_rows == 1, so the\nvalues of prev_prev_block_row and next_next_block_row were incorrect\nwhen processing, respectively, the second and second to last iMCU rows\nin a vertically-subsampled progressive JPEG image.\n\nThe intent was to:\n- point prev_block_row to the current block row when processing the\n first block row in the image,\n- point prev_prev_block_row to prev_block_row when processing the first\n two block rows in the image,\n- point next_block_row to the current block row when processing the\n last block row in the image, and\n- point next_next_block_row to next_block_row when processing the last\n two block rows in the image.\n\nThis commit modifies decompress_smooth_data() so that it computes the\ncurrent block row's position relative to the whole image and sets\nthe block row pointers based on that value.\n\nThis commit also restores a line of code that was accidentally deleted\nby 6d91e950c871103a11bac2f10c63bf998796c719:\n\n access_rows += compptr->v_samp_factor; /* prior iMCU row too */\n\naccess_rows is merely a sanity check that tells the access_virt_barray()\nmethod to generate an error if accessing the specified number of rows\nwould cause a buffer overrun. Essentially, it is a belt-and-suspenders\nmeasure to ensure that j*init_d_coef_controller() allocated enough rows\nfor the full-image virtual array. Thus, excluding that line of code did\nnot cause an observable issue.\n\nThis commit also documents dbae59281fdc6b3a6304a40134e8576d50d662c0 in\nthe change log.\n\nFixes #721","shortMessageHtmlLink":"Fix block smoothing w/vert.-subsampled prog. JPEGs"}},{"before":"e429e379b01dde9d1d92b5bbabd2a18ee75d7eaa","after":"7b844bfda67f68b7bd61a6394815b5a1628ee096","ref":"refs/heads/main","pushedAt":"2023-08-14T21:50:22.000Z","pushType":"push","commitsCount":7,"pusher":{"login":"tanersener","name":"Taner Sener","path":"/tanersener","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10158439?s=80&v=4"},"commit":{"message":"x86-64 SIMD: Use std stack frame/prologue/epilogue\n\nThis allows debuggers and profilers to reliably capture backtraces from\nwithin the x86-64 SIMD functions.\n\nIn places where rbp was previously used to access temporary variables\n(after stack alignment), we now use r15 and save/restore it accordingly.\nThe total amount of work is approximately the same, because the previous\ncode pushed the pre-alignment stack pointer to the aligned stack. The\nnew prologue and epilogue actually have fewer instructions.\n\nAlso note that the {un}collect_args macros now use rbp instead of rax to\naccess arguments passed on the stack, so we save a few instructions\nthere as well.\n\nBased on:\nhttps://github.com/alk/libjpeg-turbo/commit/debcc7c3b436467aea8d02c66a514c5099d0ad37\n\nCloses #707\nCloses #708","shortMessageHtmlLink":"x86-64 SIMD: Use std stack frame/prologue/epilogue"}},{"before":"3a53627306233013dcec61a90f0e9ed302ea5156","after":"e429e379b01dde9d1d92b5bbabd2a18ee75d7eaa","ref":"refs/heads/main","pushedAt":"2023-07-16T22:06:29.000Z","pushType":"push","commitsCount":26,"pusher":{"login":"tanersener","name":"Taner Sener","path":"/tanersener","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10158439?s=80&v=4"},"commit":{"message":"tjunittest.c: Use _getpid() on Windows","shortMessageHtmlLink":"tjunittest.c: Use _getpid() on Windows"}},{"before":"62590d428b8c059a4a469de28f36d199f9392192","after":"3a53627306233013dcec61a90f0e9ed302ea5156","ref":"refs/heads/main","pushedAt":"2023-04-10T19:43:44.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"tanersener","name":"Taner Sener","path":"/tanersener","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10158439?s=80&v=4"},"commit":{"message":"jpeg_crop_scanline: Fix calc w/sclg + 2x4,4x2 samp\n\nWhen computing the downsampled width for a particular component,\njpeg_crop_scanline() needs to take into account the fact that the\nlibjpeg code uses a combination of IDCT scaling and upsampling to\nimplement 4x2 and 2x4 upsampling with certain decompression scaling\nfactors. Failing to account for that led to incomplete upsampling of\n4x2- or 2x4-subsampled components, which caused the color converter to\nread from uninitialized memory. With 12-bit data precision, this caused\na buffer overrun or underrun and subsequent segfault if the\nuninitialized memory contained a value that was outside of the valid\nsample range (because the color converter uses the value as an array\nindex.)\n\nFixes #669","shortMessageHtmlLink":"jpeg_crop_scanline: Fix calc w/sclg + 2x4,4x2 samp"}},{"before":"cc8c6d3667af2d49125ba933f8f8bbf9deac1e16","after":"62590d428b8c059a4a469de28f36d199f9392192","ref":"refs/heads/main","pushedAt":"2023-04-05T23:09:59.000Z","pushType":"push","commitsCount":5,"pusher":{"login":"tanersener","name":"Taner Sener","path":"/tanersener","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10158439?s=80&v=4"},"commit":{"message":"Decomp: Don't enable 2-pass color quant w/ RGB565\n\nThe 2-pass color quantization algorithm assumes 3-sample pixels. RGB565\nis the only 3-component colorspace that doesn't have 3-sample pixels, so\nwe need to treat it as a special case when determining whether to enable\n2-pass color quantization. Otherwise, attempting to initialize 2-pass\ncolor quantization with an RGB565 output buffer could cause\nprescan_quantize() to read from uninitialized memory and subsequently\nunderflow/overflow the histogram array.\n\ndjpeg is supposed to fail gracefully if both -rgb565 and -colors are\nspecified, because none of its destination managers (image writers)\nsupport color quantization with RGB565. However, prescan_quantize() was\ncalled before that could occur. It is possible but very unlikely that\nthese issues could have been reproduced in applications other than\ndjpeg. The issues involve the use of two features (12-bit precision and\nRGB565) that are incompatible, and they also involve the use of two\nrarely-used legacy features (RGB565 and color quantization) that don't\nmake much sense when combined.\n\nFixes #668\nFixes #671\nFixes #680","shortMessageHtmlLink":"Decomp: Don't enable 2-pass color quant w/ RGB565"}},{"before":"97df8ea9edf0017f891072845f43ed878be4fcef","after":"cc8c6d3667af2d49125ba933f8f8bbf9deac1e16","ref":"refs/heads/main","pushedAt":"2023-03-22T10:19:38.000Z","pushType":"push","commitsCount":6,"pusher":{"login":"tanersener","name":"Taner Sener","path":"/tanersener","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10158439?s=80&v=4"},"commit":{"message":"tjbenchtest: Test all subsampling types","shortMessageHtmlLink":"tjbenchtest: Test all subsampling types"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEkXTDggA","startCursor":null,"endCursor":null}},"title":"Activity ยท arthenica/libjpeg-turbo"}