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);
 }
 

Reply via email to