]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
util/error: allow non-NUL-terminated err->src
authorPaolo Bonzini <pbonzini@redhat.com>
Mon, 26 May 2025 07:25:50 +0000 (09:25 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 5 Jun 2025 18:24:51 +0000 (20:24 +0200)
Rust makes the current file available as a statically-allocated string,
but without a NUL terminator.  Allow this by storing an optional maximum
length in the Error.

Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
include/qapi/error-internal.h
util/error.c

index d5c3904adec5e7691db281f464fa4269fc61882e..1ec3ceb40f0ec42914596ca8d5d253e03c7cc89d 100644 (file)
@@ -18,7 +18,14 @@ struct Error
 {
     char *msg;
     ErrorClass err_class;
-    const char *src, *func;
+    const char *func;
+
+    /*
+     * src might be NUL-terminated or not.  If it is, src_len is negative.
+     * If it is not, src_len is the length.
+     */
+    const char *src;
+    int src_len;
     int line;
     GString *hint;
 };
index e5bcb7c0225823a6689d840e64e6869bd68e17c2..3449ecc0b92a4a0498a432c8a83faf632b412ebe 100644 (file)
@@ -24,8 +24,8 @@ Error *error_warn;
 static void error_handle(Error **errp, Error *err)
 {
     if (errp == &error_abort) {
-        fprintf(stderr, "Unexpected error in %s() at %s:%d:\n",
-                err->func, err->src, err->line);
+        fprintf(stderr, "Unexpected error in %s() at %.*s:%d:\n",
+                err->func, err->src_len, err->src, err->line);
         error_report("%s", error_get_pretty(err));
         if (err->hint) {
             error_printf("%s", err->hint->str);
@@ -67,6 +67,7 @@ static void error_setv(Error **errp,
         g_free(msg);
     }
     err->err_class = err_class;
+    err->src_len = -1;
     err->src = src;
     err->line = line;
     err->func = func;