Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package openjph for openSUSE:Factory checked in at 2026-02-18 17:05:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/openjph (Old) and /work/SRC/openSUSE:Factory/.openjph.new.1977 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openjph" Wed Feb 18 17:05:20 2026 rev:16 rq:1333528 version:0.26.3 Changes: -------- --- /work/SRC/openSUSE:Factory/openjph/openjph.changes 2026-01-21 14:13:59.766435701 +0100 +++ /work/SRC/openSUSE:Factory/.openjph.new.1977/openjph.changes 2026-02-18 17:06:22.628089413 +0100 @@ -1,0 +2,23 @@ +Tue Feb 17 07:46:58 UTC 2026 - Petr Gajdos <[email protected]> + +- Update to 0.26.3: + * Bug fix out of range values #248 + Using versions 0.26.1 and 0.26.2 is not recommended + +------------------------------------------------------------------- +Tue Feb 17 06:28:32 UTC 2026 - Michael Vetter <[email protected]> + +- Update to 0.26.2: + * Fix a bug when the number of tiles is 0, and, in + resilient mode, when the the start of tile-part segment + (SOT) has an incorrect index, Isot #245 + +------------------------------------------------------------------- +Mon Feb 16 09:04:35 UTC 2026 - Michael Vetter <[email protected]> + +- Update to 0.26.1: + * Add ARM CPU feature detection for FreeBSD and OpenBSD #238 + * Bug fix: some HTJ2K codestream parameters are now qualified before being + used #244 + +------------------------------------------------------------------- Old: ---- 0.26.0.tar.gz New: ---- 0.26.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ openjph.spec ++++++ --- /var/tmp/diff_new_pack.M4i71z/_old 2026-02-18 17:06:24.716176321 +0100 +++ /var/tmp/diff_new_pack.M4i71z/_new 2026-02-18 17:06:24.740177320 +0100 @@ -17,7 +17,7 @@ Name: openjph -Version: 0.26.0 +Version: 0.26.3 Release: 0 Summary: An implementation of JPEG2000 Part-15 License: BSD-2-Clause ++++++ 0.26.0.tar.gz -> 0.26.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OpenJPH-0.26.0/src/core/codestream/ojph_codestream_local.cpp new/OpenJPH-0.26.3/src/core/codestream/ojph_codestream_local.cpp --- old/OpenJPH-0.26.0/src/core/codestream/ojph_codestream_local.cpp 2025-12-24 05:08:37.000000000 +0100 +++ new/OpenJPH-0.26.3/src/core/codestream/ojph_codestream_local.cpp 2026-02-17 07:41:51.000000000 +0100 @@ -118,7 +118,9 @@ num_tiles.h = sz.get_image_extent().y - sz.get_tile_offset().y; num_tiles.h = ojph_div_ceil(num_tiles.h, sz.get_tile_size().h); if (num_tiles.area() > 65535) - OJPH_ERROR(0x00030011, "number of tiles cannot exceed 65535"); + OJPH_ERROR(0x00030011, "the number of tiles cannot exceed 65535"); + if (num_tiles.area() == 0) + OJPH_ERROR(0x00030012, "the number of tiles cannot be 0"); //allocate tiles allocator->pre_alloc_obj<tile>((size_t)num_tiles.area()); @@ -891,175 +893,181 @@ if (sot.read(infile, resilient)) { ui64 tile_start_location = (ui64)infile->tell(); + bool skip_tile = false; - if (sot.get_tile_index() > (int)num_tiles.area()) + if (sot.get_tile_index() >= (int)num_tiles.area()) { - if (resilient) + if (resilient) { OJPH_INFO(0x00030061, "wrong tile index") + skip_tile = true; // skip the faulty tile + } else OJPH_ERROR(0x00030061, "wrong tile index") } - if (sot.get_tile_part_index()) - { //tile part - if (sot.get_num_tile_parts() && - sot.get_tile_part_index() >= sot.get_num_tile_parts()) - { - if (resilient) - OJPH_INFO(0x00030062, - "error in tile part number, should be smaller than total" - " number of tile parts") - else - OJPH_ERROR(0x00030062, - "error in tile part number, should be smaller than total" - " number of tile parts") - } - - bool sod_found = false; - ui16 other_tile_part_markers[7] = { SOT, POC, PPT, PLT, COM, - NLT, SOD }; - while (true) - { - int marker_idx = 0; - int result = 0; - marker_idx = find_marker(infile, other_tile_part_markers + 1, 6); - if (marker_idx == 0) - result = skip_marker(infile, "POC", - "POC marker segment in a tile is not supported yet", - OJPH_MSG_WARN, resilient); - else if (marker_idx == 1) - result = skip_marker(infile, "PPT", - "PPT marker segment in a tile is not supported yet", - OJPH_MSG_WARN, resilient); - else if (marker_idx == 2) - //Skipping PLT marker segment;this should not cause any issues - result = skip_marker(infile, "PLT", NULL, - OJPH_MSG_NO_MSG, resilient); - else if (marker_idx == 3) - result = skip_marker(infile, "COM", NULL, - OJPH_MSG_NO_MSG, resilient); - else if (marker_idx == 4) - result = skip_marker(infile, "NLT", - "NLT marker in tile is not supported yet", - OJPH_MSG_WARN, resilient); - else if (marker_idx == 5) - { - sod_found = true; - break; - } - - if (marker_idx == -1) //marker not found - { - if (resilient) - OJPH_INFO(0x00030063, - "File terminated early before start of data is found" - " for tile indexed %d and tile part %d", - sot.get_tile_index(), sot.get_tile_part_index()) - else - OJPH_ERROR(0x00030063, - "File terminated early before start of data is found" - " for tile indexed %d and tile part %d", - sot.get_tile_index(), sot.get_tile_part_index()) - break; - } - if (result == -1) //file terminated during marker seg. skipping + if (!skip_tile) + { + if (sot.get_tile_part_index()) + { //tile part + if (sot.get_num_tile_parts() && + sot.get_tile_part_index() >= sot.get_num_tile_parts()) { if (resilient) - OJPH_INFO(0x00030064, - "File terminated during marker segment skipping") + OJPH_INFO(0x00030062, + "error in tile part number, should be smaller than total" + " number of tile parts") else - OJPH_ERROR(0x00030064, - "File terminated during marker segment skipping") - break; - } - } - if (sod_found) - tiles[sot.get_tile_index()].parse_tile_header(sot, infile, - tile_start_location); - } - else - { //first tile part - bool sod_found = false; - ui16 first_tile_part_markers[12] = { SOT, COD, COC, QCD, QCC, RGN, - POC, PPT, PLT, COM, NLT, SOD }; - while (true) - { - int marker_idx = 0; - int result = 0; - marker_idx = find_marker(infile, first_tile_part_markers+1, 11); - if (marker_idx == 0) - result = skip_marker(infile, "COD", - "COD marker segment in a tile is not supported yet", - OJPH_MSG_WARN, resilient); - else if (marker_idx == 1) - result = skip_marker(infile, "COC", - "COC marker segment in a tile is not supported yet", - OJPH_MSG_WARN, resilient); - else if (marker_idx == 2) - result = skip_marker(infile, "QCD", - "QCD marker segment in a tile is not supported yet", - OJPH_MSG_WARN, resilient); - else if (marker_idx == 3) - result = skip_marker(infile, "QCC", - "QCC marker segment in a tile is not supported yet", - OJPH_MSG_WARN, resilient); - else if (marker_idx == 4) - result = skip_marker(infile, "RGN", - "RGN marker segment in a tile is not supported yet", - OJPH_MSG_WARN, resilient); - else if (marker_idx == 5) - result = skip_marker(infile, "POC", - "POC marker segment in a tile is not supported yet", - OJPH_MSG_WARN, resilient); - else if (marker_idx == 6) - result = skip_marker(infile, "PPT", - "PPT marker segment in a tile is not supported yet", - OJPH_MSG_WARN, resilient); - else if (marker_idx == 7) - //Skipping PLT marker segment;this should not cause any issues - result = skip_marker(infile, "PLT", NULL, - OJPH_MSG_NO_MSG, resilient); - else if (marker_idx == 8) - result = skip_marker(infile, "COM", NULL, - OJPH_MSG_NO_MSG, resilient); - else if (marker_idx == 9) - result = skip_marker(infile, "NLT", - "PPT marker segment in a tile is not supported yet", - OJPH_MSG_WARN, resilient); - else if (marker_idx == 10) - { - sod_found = true; - break; + OJPH_ERROR(0x00030062, + "error in tile part number, should be smaller than total" + " number of tile parts") } - if (marker_idx == -1) //marker not found + bool sod_found = false; + ui16 other_tile_part_markers[7] = { SOT, POC, PPT, PLT, COM, + NLT, SOD }; + while (true) { - if (resilient) - OJPH_INFO(0x00030065, - "File terminated early before start of data is found" - " for tile indexed %d and tile part %d", - sot.get_tile_index(), sot.get_tile_part_index()) - else - OJPH_ERROR(0x00030065, - "File terminated early before start of data is found" - " for tile indexed %d and tile part %d", - sot.get_tile_index(), sot.get_tile_part_index()) - break; + int marker_idx = 0; + int result = 0; + marker_idx = find_marker(infile, other_tile_part_markers+1, 6); + if (marker_idx == 0) + result = skip_marker(infile, "POC", + "POC marker segment in a tile is not supported yet", + OJPH_MSG_WARN, resilient); + else if (marker_idx == 1) + result = skip_marker(infile, "PPT", + "PPT marker segment in a tile is not supported yet", + OJPH_MSG_WARN, resilient); + else if (marker_idx == 2) + //Skipping PLT marker segment;this should not cause any issues + result = skip_marker(infile, "PLT", NULL, + OJPH_MSG_NO_MSG, resilient); + else if (marker_idx == 3) + result = skip_marker(infile, "COM", NULL, + OJPH_MSG_NO_MSG, resilient); + else if (marker_idx == 4) + result = skip_marker(infile, "NLT", + "NLT marker in tile is not supported yet", + OJPH_MSG_WARN, resilient); + else if (marker_idx == 5) + { + sod_found = true; + break; + } + + if (marker_idx == -1) //marker not found + { + if (resilient) + OJPH_INFO(0x00030063, + "File terminated early before start of data is found" + " for tile indexed %d and tile part %d", + sot.get_tile_index(), sot.get_tile_part_index()) + else + OJPH_ERROR(0x00030063, + "File terminated early before start of data is found" + " for tile indexed %d and tile part %d", + sot.get_tile_index(), sot.get_tile_part_index()) + break; + } + if (result == -1) //file terminated during marker seg. skipping + { + if (resilient) + OJPH_INFO(0x00030064, + "File terminated during marker segment skipping") + else + OJPH_ERROR(0x00030064, + "File terminated during marker segment skipping") + break; + } } - if (result == -1) //file terminated during marker seg. skipping + if (sod_found) + tiles[sot.get_tile_index()].parse_tile_header(sot, infile, + tile_start_location); + } + else + { //first tile part + bool sod_found = false; + ui16 first_tile_part_markers[12] = { SOT, COD, COC, QCD, QCC, RGN, + POC, PPT, PLT, COM, NLT, SOD }; + while (true) { - if (resilient) - OJPH_INFO(0x00030066, - "File terminated during marker segment skipping") - else - OJPH_ERROR(0x00030066, - "File terminated during marker segment skipping") - break; + int marker_idx = 0; + int result = 0; + marker_idx = find_marker(infile, first_tile_part_markers+1, 11); + if (marker_idx == 0) + result = skip_marker(infile, "COD", + "COD marker segment in a tile is not supported yet", + OJPH_MSG_WARN, resilient); + else if (marker_idx == 1) + result = skip_marker(infile, "COC", + "COC marker segment in a tile is not supported yet", + OJPH_MSG_WARN, resilient); + else if (marker_idx == 2) + result = skip_marker(infile, "QCD", + "QCD marker segment in a tile is not supported yet", + OJPH_MSG_WARN, resilient); + else if (marker_idx == 3) + result = skip_marker(infile, "QCC", + "QCC marker segment in a tile is not supported yet", + OJPH_MSG_WARN, resilient); + else if (marker_idx == 4) + result = skip_marker(infile, "RGN", + "RGN marker segment in a tile is not supported yet", + OJPH_MSG_WARN, resilient); + else if (marker_idx == 5) + result = skip_marker(infile, "POC", + "POC marker segment in a tile is not supported yet", + OJPH_MSG_WARN, resilient); + else if (marker_idx == 6) + result = skip_marker(infile, "PPT", + "PPT marker segment in a tile is not supported yet", + OJPH_MSG_WARN, resilient); + else if (marker_idx == 7) + //Skipping PLT marker segment;this should not cause any issues + result = skip_marker(infile, "PLT", NULL, + OJPH_MSG_NO_MSG, resilient); + else if (marker_idx == 8) + result = skip_marker(infile, "COM", NULL, + OJPH_MSG_NO_MSG, resilient); + else if (marker_idx == 9) + result = skip_marker(infile, "NLT", + "PPT marker segment in a tile is not supported yet", + OJPH_MSG_WARN, resilient); + else if (marker_idx == 10) + { + sod_found = true; + break; + } + + if (marker_idx == -1) //marker not found + { + if (resilient) + OJPH_INFO(0x00030065, + "File terminated early before start of data is found" + " for tile indexed %d and tile part %d", + sot.get_tile_index(), sot.get_tile_part_index()) + else + OJPH_ERROR(0x00030065, + "File terminated early before start of data is found" + " for tile indexed %d and tile part %d", + sot.get_tile_index(), sot.get_tile_part_index()) + break; + } + if (result == -1) //file terminated during marker seg. skipping + { + if (resilient) + OJPH_INFO(0x00030066, + "File terminated during marker segment skipping") + else + OJPH_ERROR(0x00030066, + "File terminated during marker segment skipping") + break; + } } + if (sod_found) + tiles[sot.get_tile_index()].parse_tile_header(sot, infile, + tile_start_location); } - if (sod_found) - tiles[sot.get_tile_index()].parse_tile_header(sot, infile, - tile_start_location); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OpenJPH-0.26.0/src/core/codestream/ojph_params.cpp new/OpenJPH-0.26.3/src/core/codestream/ojph_params.cpp --- old/OpenJPH-0.26.0/src/core/codestream/ojph_params.cpp 2025-12-24 05:08:37.000000000 +0100 +++ new/OpenJPH-0.26.3/src/core/codestream/ojph_params.cpp 2026-02-17 07:41:51.000000000 +0100 @@ -735,6 +735,12 @@ OJPH_ERROR(0x00050052, "error reading SIZ marker"); if (file->read(&cptr[c].YRsiz, 1) != 1) OJPH_ERROR(0x00050053, "error reading SIZ marker"); + if ((cptr[c].SSiz & 0x7F) > 37) + OJPH_ERROR(0x00050054, "Wrong SIZ-SSiz value of %d", cptr[c].SSiz); + if (cptr[c].XRsiz == 0) + OJPH_ERROR(0x00050055, "Wrong SIZ-XRsiz value of %d", cptr[c].XRsiz); + if (cptr[c].YRsiz == 0) + OJPH_ERROR(0x00050056, "Wrong SIZ-YRsiz value of %d", cptr[c].YRsiz); } ws_kern_support_needed = (Rsiz & 0x20) != 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OpenJPH-0.26.0/src/core/openjph/ojph_arch.h new/OpenJPH-0.26.3/src/core/openjph/ojph_arch.h --- old/OpenJPH-0.26.0/src/core/openjph/ojph_arch.h 2025-12-24 05:08:37.000000000 +0100 +++ new/OpenJPH-0.26.3/src/core/openjph/ojph_arch.h 2026-02-17 07:41:51.000000000 +0100 @@ -108,6 +108,10 @@ #define OJPH_OS_ANDROID #elif (defined __linux) #define OJPH_OS_LINUX +#elif (defined __FreeBSD__) +#define OJPH_OS_FREEBSD +#elif (defined __OpenBSD__) +#define OJPH_OS_OPENBSD #endif ///////////////////////////////////////////////////////////////////////////// diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OpenJPH-0.26.0/src/core/openjph/ojph_version.h new/OpenJPH-0.26.3/src/core/openjph/ojph_version.h --- old/OpenJPH-0.26.0/src/core/openjph/ojph_version.h 2025-12-24 05:08:37.000000000 +0100 +++ new/OpenJPH-0.26.3/src/core/openjph/ojph_version.h 2026-02-17 07:41:51.000000000 +0100 @@ -35,4 +35,4 @@ #define OPENJPH_VERSION_MAJOR 0 #define OPENJPH_VERSION_MINOR 26 -#define OPENJPH_VERSION_PATCH 0 +#define OPENJPH_VERSION_PATCH 3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OpenJPH-0.26.0/src/core/others/ojph_arch.cpp new/OpenJPH-0.26.3/src/core/others/ojph_arch.cpp --- old/OpenJPH-0.26.0/src/core/others/ojph_arch.cpp 2025-12-24 05:08:37.000000000 +0100 +++ new/OpenJPH-0.26.3/src/core/others/ojph_arch.cpp 2026-02-17 07:41:51.000000000 +0100 @@ -161,23 +161,32 @@ } #elif defined(OJPH_ARCH_ARM) - #ifndef OJPH_OS_LINUX //Windows/Apple/Android + #if !defined(OJPH_OS_LINUX) && !defined(OJPH_OS_FREEBSD) && !defined(OJPH_OS_OPENBSD) // Windows/Apple/Android bool init_cpu_ext_level(int& level) { level = ARM_CPU_EXT_LEVEL_ASIMD; return true; } - #else // Linux + #else // Linux/FreeBSD/OpenBSD #if defined(__aarch64__) || defined(_M_ARM64) // 64-bit ARM #include <sys/auxv.h> - #include <asm/hwcap.h> + #ifdef OJPH_OS_LINUX + #include <asm/hwcap.h> + #endif bool init_cpu_ext_level(int& level) { - unsigned long hwcaps = getauxval(AT_HWCAP); - unsigned long hwcaps2 = getauxval(AT_HWCAP2); + #ifdef OJPH_OS_LINUX + unsigned long hwcaps = getauxval(AT_HWCAP); + unsigned long hwcaps2 = getauxval(AT_HWCAP2); + #else + unsigned long hwcaps = 0; + unsigned long hwcaps2 = 0; + elf_aux_info(AT_HWCAP, &hwcaps, sizeof(hwcaps)); + elf_aux_info(AT_HWCAP2, &hwcaps2, sizeof(hwcaps2)); + #endif level = ARM_CPU_EXT_LEVEL_GENERIC; if (hwcaps & HWCAP_ASIMD) { @@ -194,10 +203,17 @@ #else // 32-bit ARM #include <sys/auxv.h> - #include <asm/hwcap.h> + #ifdef OJPH_OS_LINUX + #include <asm/hwcap.h> + #endif bool init_cpu_ext_level(int& level) { - unsigned long hwcaps = getauxval(AT_HWCAP); + #ifdef OJPH_OS_LINUX + unsigned long hwcaps = getauxval(AT_HWCAP); + #else + unsigned long hwcaps = 0; + elf_aux_info(AT_HWCAP, &hwcaps, sizeof(hwcaps)); + #endif level = ARM_CPU_EXT_LEVEL_GENERIC; if (hwcaps & HWCAP_NEON) level = ARM_CPU_EXT_LEVEL_NEON;
