Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libmseed for openSUSE:Factory checked in at 2025-12-27 13:22:21 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libmseed (Old) and /work/SRC/openSUSE:Factory/.libmseed.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libmseed" Sat Dec 27 13:22:21 2025 rev:10 rq:1324486 version:3.2.2 Changes: -------- --- /work/SRC/openSUSE:Factory/libmseed/libmseed.changes 2025-12-22 22:50:15.819554966 +0100 +++ /work/SRC/openSUSE:Factory/.libmseed.new.1928/libmseed.changes 2025-12-27 13:22:21.835716450 +0100 @@ -1,0 +2,10 @@ +Sat Dec 27 09:53:31 UTC 2025 - Andreas Stieger <[email protected]> + +- update to 3.2.2: + * Allow mseh_set_ptr_r() to create extra headers when none exist + for a Merge Patch using the root pointer (""). Pointers to non- + root locations still must exist. Recommend use for Merge Patch + operations is to always use the root pointer ("") for + consistency + +------------------------------------------------------------------- Old: ---- libmseed-3.2.1.tar.gz New: ---- libmseed-3.2.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libmseed.spec ++++++ --- /var/tmp/diff_new_pack.vrhCNH/_old 2025-12-27 13:22:22.643749651 +0100 +++ /var/tmp/diff_new_pack.vrhCNH/_new 2025-12-27 13:22:22.643749651 +0100 @@ -18,7 +18,7 @@ %define sover 3 Name: libmseed -Version: 3.2.1 +Version: 3.2.2 Release: 0 Summary: MiniSEED data format library License: Apache-2.0 ++++++ libmseed-3.2.1.tar.gz -> libmseed-3.2.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmseed-3.2.1/.github/workflows/build-test.yml new/libmseed-3.2.2/.github/workflows/build-test.yml --- old/libmseed-3.2.1/.github/workflows/build-test.yml 2025-12-20 18:34:15.000000000 +0100 +++ new/libmseed-3.2.2/.github/workflows/build-test.yml 2025-12-26 20:21:02.000000000 +0100 @@ -1,6 +1,8 @@ name: build-and-test on: + push: + branches: [ main ] pull_request: branches: [ main, develop ] workflow_dispatch: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmseed-3.2.1/ChangeLog new/libmseed-3.2.2/ChangeLog --- old/libmseed-3.2.1/ChangeLog 2025-12-20 18:34:15.000000000 +0100 +++ new/libmseed-3.2.2/ChangeLog 2025-12-26 20:21:02.000000000 +0100 @@ -1,3 +1,7 @@ +2025.369: v3.2.2 + - Allow mseh_set_ptr_r() to create extra headers when none exist for a merge patch + using the root pointer (""). Pointers to non-root locations still must exist. + 2025.354: v3.2.1 - Rename ms3_mstl_init_fd() to ms3_msfp_init_fd() and add backward compatibility. - Add -fPIC to the build options for the static library target. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmseed-3.2.1/extraheaders.c new/libmseed-3.2.2/extraheaders.c --- old/libmseed-3.2.1/extraheaders.c 2025-12-20 18:34:15.000000000 +0100 +++ new/libmseed-3.2.2/extraheaders.c 2025-12-26 20:21:02.000000000 +0100 @@ -278,7 +278,9 @@ * For most value types, if the @p ptr or final header values do not exist * they will be created. If the header value exists it will be replaced. * When the value type is 'M', for Merge Patch (RFC 7386), the location - * indicated by @p ptr must exist. + * indicated by @p ptr must exist unless root pointer: `""` (empty string). + * Recommended practice is to always use the root pointer (`""`) when + * modifying extra headers with a merge patch for consistent behavior. * * The @p type value specifies the data type expected for @p value. * @@ -312,6 +314,8 @@ * * @see mseh_free_parsestate() * @see mseh_serialize() + * @see mseh_replace() + * @see mseh_print() ***************************************************************************/ int mseh_set_ptr_r (MS3Record *msr, const char *ptr, void *value, char type, @@ -414,15 +418,26 @@ { if ((patch_doc = yyjson_doc_mut_copy (patch_idoc, &alc))) { - /* Get patch target value */ - if ((target_val = yyjson_mut_doc_ptr_get (parsed->mut_doc, ptr))) + /* Get patch target value, or use root pointer with empty document */ + target_val = yyjson_mut_doc_ptr_get (parsed->mut_doc, ptr); + + if (target_val || ptr[0] == '\0') { /* Generate merged value */ if ((merged_val = yyjson_mut_merge_patch (parsed->mut_doc, target_val, yyjson_mut_doc_get_root (patch_doc)))) { - /* Replace value at pointer with merged value */ - rv = yyjson_mut_doc_ptr_replace (parsed->mut_doc, ptr, merged_val); + if (target_val) + { + /* Replace value at pointer with merged value */ + rv = yyjson_mut_doc_ptr_replace (parsed->mut_doc, ptr, merged_val); + } + else + { + /* No existing target at root, set merged value as document root */ + yyjson_mut_doc_set_root (parsed->mut_doc, merged_val); + rv = true; + } } } } @@ -1093,13 +1108,16 @@ * * To _remove_ all of the extra headers, set @p jsonstring to NULL. * - * This function cannot be used in combination with the routines that use - * a parsed state, i.e. mseh_get_ptr_r() and mseh_set_ptr_r(). + * @warning This function cannot be used in combination with the routines + * that use a parsed state, i.e. mseh_get_ptr_r() and mseh_set_ptr_r(). * * @param[in] msr ::MS3Record to generate extra headers for * @param[in] jsonstring JSON replacment for extra headers of @p msr * * @returns Length of extra headers on success, otherwise a (negative) libmseed error code + * + * @see mseh_get_ptr_r() + * @see mseh_set_ptr_r() ***************************************************************************/ int mseh_replace (MS3Record *msr, char *jsonstring) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmseed-3.2.1/libmseed.h new/libmseed-3.2.2/libmseed.h --- old/libmseed-3.2.1/libmseed.h 2025-12-20 18:34:15.000000000 +0100 +++ new/libmseed-3.2.2/libmseed.h 2025-12-26 20:21:02.000000000 +0100 @@ -29,8 +29,8 @@ { #endif -#define LIBMSEED_VERSION "3.2.1" //!< Library version -#define LIBMSEED_RELEASE "2025.354" //!< Library release date +#define LIBMSEED_VERSION "3.2.2" //!< Library version +#define LIBMSEED_RELEASE "2025.360" //!< Library release date /** @defgroup io-functions File and URL I/O */ /** @defgroup miniseed-record Record Handling */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmseed-3.2.1/test/test-extraheaders.c new/libmseed-3.2.2/test/test-extraheaders.c --- old/libmseed-3.2.1/test/test-extraheaders.c 2025-12-20 18:34:15.000000000 +0100 +++ new/libmseed-3.2.2/test/test-extraheaders.c 2025-12-26 20:21:02.000000000 +0100 @@ -100,7 +100,7 @@ CHECK (rv == 0, "mseh_set_int64() returned unexpected error"); rv = mseh_get_int64 (msr, "/New/Integer", &getint); - CHECK (rv == 0, "mseh_set_int64() returned unexpected non-match"); + CHECK (rv == 0, "mseh_get_int64() returned unexpected non-match"); CHECK (getint == setint); setstr = "Value"; @@ -116,7 +116,7 @@ CHECK (rv == 0, "mseh_set_boolean() returned unexpected error"); rv = mseh_get_boolean (msr, "/New/Boolean", &getbool); - CHECK (rv == 0, "mseh_set_boolean() returned unexpected non-match"); + CHECK (rv == 0, "mseh_get_boolean() returned unexpected non-match"); CHECK (getbool == setbool); msr3_free (&msr); @@ -132,14 +132,15 @@ msr = msr3_init (msr); REQUIRE (msr != NULL, "msr3_init() returned unexpected NULL"); - /* Populate initial header JSON */ - jsondoc = "{\"root\":{\"string\":\"value\"}}"; - msr->extralength = strlen (jsondoc); - msr->extra = malloc (msr->extralength); - REQUIRE (msr->extra != NULL, "Error allocating memory for msr->extra"); - memcpy (msr->extra, jsondoc, msr->extralength); + /* No existing headers, create a header value with Merge Patch at root pointer ("") */ + patchdoc = "{\"root\":{\"string\":\"value\"}}"; + rv = mseh_set_ptr_r (msr, "", patchdoc, 'M', NULL); + CHECK (rv == 0, "mseh_set_ptr_r() returned unexpected error"); + REQUIRE (msr->extra != NULL, "msr->extra cannot be NULL"); + jsondoc = patchdoc; + CHECK_SUBSTREQ (msr->extra, jsondoc, strlen (jsondoc)); - /* Replace /root/string value with a pointer to the whole document ("") */ + /* Replace /root/string value with a root pointer to the entire document ("") */ patchdoc = "{\"root\":{\"string\":\"Updated value\"}}"; rv = mseh_set_ptr_r (msr, "", patchdoc, 'M', NULL); CHECK (rv == 0, "mseh_set_ptr_r() returned unexpected error"); @@ -148,7 +149,7 @@ CHECK_SUBSTREQ (msr->extra, jsondoc, strlen(jsondoc)); /* Add the /root/array value with pointer to /root */ - patchdoc = "{\"array\":[1,2,3]}"; + patchdoc = "{\"array\": [1,2,3]}"; rv = mseh_set_ptr_r (msr, "/root", patchdoc, 'M', NULL); CHECK (rv == 0, "mseh_set_ptr_r() returned unexpected error"); REQUIRE (msr->extra != NULL, "msr->extra cannot be NULL"); @@ -156,13 +157,23 @@ CHECK_SUBSTREQ (msr->extra, jsondoc, strlen(jsondoc)); /* Remove /root/string, /root/array, and add /root/boolean */ - patchdoc = "{\"root\":{\"string\":null,\"array\":null,\"boolean\":true}}"; + patchdoc = "{\"root\": {\"string\": null, \"array\": null, \"boolean\": true}}"; rv = mseh_set_ptr_r (msr, "", patchdoc, 'M', NULL); CHECK (rv == 0, "mseh_set_ptr_r() returned unexpected error"); REQUIRE (msr->extra != NULL, "msr->extra cannot be NULL"); jsondoc = "{\"root\":{\"boolean\":true}}"; CHECK_SUBSTREQ (msr->extra, jsondoc, strlen(jsondoc)); + /* Fail to set a header value with Merge Patch, no existing target value */ + patchdoc = "{\"key\":\"value\"}"; + rv = mseh_set_ptr_r (msr, "/root/doesnotexist", patchdoc, 'M', NULL); + CHECK (rv < 0, "mseh_set_ptr_r() returned unexpected match"); + + /* Fail to set a header value with Merge Patch, invalid JSON Pointer */ + patchdoc = "{\"root\":{\"string\":\"value\"}}"; + rv = mseh_set_ptr_r (msr, "invalid", patchdoc, 'M', NULL); + CHECK (rv < 0, "mseh_set_ptr_r() returned unexpected match"); + msr3_free (&msr); }
