[libvirt PATCH 3/3] virBufferTrim: do not accept len

Ján Tomko jtomko at redhat.com
Sun Feb 2 19:53:04 UTC 2020


Always trim the full specified suffix.

All of the callers outside of tests were passing either
strlen or the actual length of the string.

Signed-off-by: Ján Tomko <jtomko at redhat.com>
---
 src/conf/domain_addr.c      |  2 +-
 src/conf/domain_conf.c      |  6 +++---
 src/cpu/cpu_x86.c           |  6 +++---
 src/qemu/qemu_command.c     |  8 ++++----
 src/rpc/virnetsshsession.c  |  2 +-
 src/storage/storage_util.c  |  4 ++--
 src/util/virbuffer.c        | 28 ++++++++--------------------
 src/util/virbuffer.h        |  2 +-
 src/util/virqemu.c          |  2 +-
 src/util/virresctrl.c       |  4 ++--
 tests/qemublocktest.c       |  2 +-
 tests/qemumonitorjsontest.c |  4 ++--
 tests/virbuftest.c          | 13 ++++++-------
 tools/virsh-domain.c        |  8 ++++----
 tools/vsh.c                 |  4 ++--
 15 files changed, 41 insertions(+), 54 deletions(-)

diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
index bde0784189..c0e468122a 100644
--- a/src/conf/domain_addr.c
+++ b/src/conf/domain_addr.c
@@ -1946,7 +1946,7 @@ virDomainUSBAddressPortFormatBuf(virBufferPtr buf,
             break;
         virBufferAsprintf(buf, "%u.", port[i]);
     }
-    virBufferTrim(buf, ".", -1);
+    virBufferTrim(buf, ".");
 }
 
 
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 9b60db7ecd..c95bd34fb5 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -25521,7 +25521,7 @@ virDomainVirtioNetGuestOptsFormat(char **outstr,
         virBufferAsprintf(&buf, "ufo='%s' ",
                           virTristateSwitchTypeToString(def->driver.virtio.guest.ufo));
     }
-    virBufferTrim(&buf, " ", -1);
+    virBufferTrim(&buf, " ");
 
     *outstr = virBufferContentAndReset(&buf);
     return 0;
@@ -25561,7 +25561,7 @@ virDomainVirtioNetHostOptsFormat(char **outstr,
         virBufferAsprintf(&buf, "mrg_rxbuf='%s' ",
                           virTristateSwitchTypeToString(def->driver.virtio.host.mrg_rxbuf));
     }
-    virBufferTrim(&buf, " ", -1);
+    virBufferTrim(&buf, " ");
 
     *outstr = virBufferContentAndReset(&buf);
     return 0;
@@ -30580,7 +30580,7 @@ virDomainGetBlkioParametersAssignFromDef(virDomainDefPtr def,
                               def->blkio.devices[i].path, \
                               def->blkio.devices[i].param); \
         } \
-        virBufferTrim(&buf, ",", -1); \
+        virBufferTrim(&buf, ","); \
         data = virBufferContentAndReset(&buf); \
         if (virTypedParameterAssign(&(params[(*nparams)++]), name, \
                                     VIR_TYPED_PARAM_STRING, data) < 0) \
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
index 9b7981d574..dca9ed2979 100644
--- a/src/cpu/cpu_x86.c
+++ b/src/cpu/cpu_x86.c
@@ -1981,7 +1981,7 @@ x86FormatSignatures(virCPUx86ModelPtr model)
                           (unsigned long)model->signatures[i]);
     }
 
-    virBufferTrim(&buf, ",", -1);
+    virBufferTrim(&buf, ",");
 
     return virBufferContentAndReset(&buf);
 }
@@ -3059,8 +3059,8 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
         }
     }
 
-    virBufferTrim(&bufAdded, ",", -1);
-    virBufferTrim(&bufRemoved, ",", -1);
+    virBufferTrim(&bufAdded, ",");
+    virBufferTrim(&bufRemoved, ",");
 
     added = virBufferContentAndReset(&bufAdded);
     removed = virBufferContentAndReset(&bufRemoved);
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index c8195cfbb9..81f5fa3416 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -2360,7 +2360,7 @@ qemuBuildFloppyCommandLineControllerOptions(virCommandPtr cmd,
 
     if (explicitfdc && hasfloppy) {
         /* Newer Q35 machine types require an explicit FDC controller */
-        virBufferTrim(&fdc_opts, ",", -1);
+        virBufferTrim(&fdc_opts, ",");
         virCommandAddArg(cmd, "-device");
         virCommandAddArgBuffer(cmd, &fdc_opts);
     }
@@ -3979,7 +3979,7 @@ qemuBuildHostNetStr(virDomainNetDefPtr net,
     }
 
 
-    virBufferTrim(&buf, ",", -1);
+    virBufferTrim(&buf, ",");
 
     return virBufferContentAndReset(&buf);
 }
@@ -6330,7 +6330,7 @@ qemuBuildBootCommandLine(virCommandPtr cmd,
     if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BOOT_STRICT))
         virBufferAddLit(&boot_buf, "strict=on,");
 
-    virBufferTrim(&boot_buf, ",", -1);
+    virBufferTrim(&boot_buf, ",");
 
     boot_opts_str = virBufferContentAndReset(&boot_buf);
     if (boot_opts_str) {
@@ -7744,7 +7744,7 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg,
      * doesn't support it, it fallbacks to previous migration algorithm silently. */
     virBufferAddLit(&opt, "seamless-migration=on,");
 
-    virBufferTrim(&opt, ",", -1);
+    virBufferTrim(&opt, ",");
 
     virCommandAddArg(cmd, "-spice");
     virCommandAddArgBuffer(cmd, &opt);
diff --git a/src/rpc/virnetsshsession.c b/src/rpc/virnetsshsession.c
index 63773ecfc2..c31d80d4eb 100644
--- a/src/rpc/virnetsshsession.c
+++ b/src/rpc/virnetsshsession.c
@@ -357,7 +357,7 @@ virNetSSHCheckHostKey(virNetSSHSessionPtr sess)
              * we have to use a *MAGIC* constant. */
             for (i = 0; i < 16; i++)
                 virBufferAsprintf(&buff, "%02hhX:", keyhash[i]);
-            virBufferTrim(&buff, ":", 1);
+            virBufferTrim(&buff, ":");
 
             keyhashstr = virBufferContentAndReset(&buff);
 
diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c
index d285e66879..7688ea9fd9 100644
--- a/src/storage/storage_util.c
+++ b/src/storage/storage_util.c
@@ -755,7 +755,7 @@ storageBackendCreateQemuImgOpts(virStorageEncryptionInfoDefPtr encinfo,
         }
     }
 
-    virBufferTrim(&buf, ",", -1);
+    virBufferTrim(&buf, ",");
 
     *opts = virBufferContentAndReset(&buf);
     return 0;
@@ -4083,7 +4083,7 @@ virStorageBackendFileSystemMountAddOptions(virCommandPtr cmd,
                  "mount_opts from XML", def->name, uuidstr);
     }
 
-    virBufferTrim(&buf, ",", -1);
+    virBufferTrim(&buf, ",");
     mountOpts = virBufferContentAndReset(&buf);
 
     if (mountOpts)
diff --git a/src/util/virbuffer.c b/src/util/virbuffer.c
index b76d99b56f..b78c3debe9 100644
--- a/src/util/virbuffer.c
+++ b/src/util/virbuffer.c
@@ -637,39 +637,27 @@ virBufferStrcat(virBufferPtr buf, ...)
 /**
  * virBufferTrim:
  * @buf: the buffer to trim
- * @str: the optional string, to force an exact trim
- * @len: the number of bytes to trim, or -1 to use @str
+ * @str: the string to be trimmed from the tail
  *
- * Trim the tail of a buffer.  If @str is provided, the trim only occurs
- * if the current tail of the buffer matches @str; a non-negative @len
- * further limits how much of the tail is trimmed.  If @str is NULL, then
- * @len must be non-negative.
+ * Trim the supplied string from the tail of the buffer.
  */
 void
-virBufferTrim(virBufferPtr buf, const char *str, int len)
+virBufferTrim(virBufferPtr buf, const char *str)
 {
-    size_t len2 = 0;
+    size_t len = 0;
 
     if (!buf || !buf->str)
         return;
 
-    if (!str && len < 0)
+    if (!str)
         return;
 
+    len = strlen(str);
 
-    if (len > 0 && len > buf->str->len)
+    if (len > buf->str->len ||
+        memcmp(&buf->str->str[buf->str->len - len], str, len) != 0)
         return;
 
-    if (str) {
-        len2 = strlen(str);
-        if (len2 > buf->str->len ||
-            memcmp(&buf->str->str[buf->str->len - len2], str, len2) != 0)
-            return;
-    }
-
-    if (len < 0)
-        len = len2;
-
     g_string_truncate(buf->str, buf->str->len - len);
 }
 
diff --git a/src/util/virbuffer.h b/src/util/virbuffer.h
index 7b068075b2..b66b1f2b23 100644
--- a/src/util/virbuffer.h
+++ b/src/util/virbuffer.h
@@ -91,7 +91,7 @@ void virBufferSetIndent(virBufferPtr, int indent);
 size_t virBufferGetIndent(const virBuffer *buf);
 size_t virBufferGetEffectiveIndent(const virBuffer *buf);
 
-void virBufferTrim(virBufferPtr buf, const char *trim, int len);
+void virBufferTrim(virBufferPtr buf, const char *trim);
 void virBufferTrimChars(virBufferPtr buf, const char *trim);
 void virBufferTrimLen(virBufferPtr buf, int len);
 void virBufferAddStr(virBufferPtr buf, const char *str);
diff --git a/src/util/virqemu.c b/src/util/virqemu.c
index 8d0429625d..78a9e0480b 100644
--- a/src/util/virqemu.c
+++ b/src/util/virqemu.c
@@ -220,7 +220,7 @@ virQEMUBuildCommandLineJSON(virJSONValuePtr value,
     if (virQEMUBuildCommandLineJSONRecurse(NULL, value, buf, array, false) < 0)
         return -1;
 
-    virBufferTrim(buf, ",", -1);
+    virBufferTrim(buf, ",");
 
     return 0;
 }
diff --git a/src/util/virresctrl.c b/src/util/virresctrl.c
index 213d7492d3..569a9ee770 100644
--- a/src/util/virresctrl.c
+++ b/src/util/virresctrl.c
@@ -1432,7 +1432,7 @@ virResctrlAllocMemoryBandwidthFormat(virResctrlAllocPtr alloc,
         }
     }
 
-    virBufferTrim(buf, ";", 1);
+    virBufferTrim(buf, ";");
     virBufferAddChar(buf, '\n');
     return 0;
 }
@@ -1574,7 +1574,7 @@ virResctrlAllocFormatCache(virResctrlAllocPtr alloc,
                 VIR_FREE(mask_str);
             }
 
-            virBufferTrim(buf, ";", 1);
+            virBufferTrim(buf, ";");
             virBufferAddChar(buf, '\n');
         }
     }
diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
index 3076dc9645..4cfabf0766 100644
--- a/tests/qemublocktest.c
+++ b/tests/qemublocktest.c
@@ -454,7 +454,7 @@ testQemuImageCreate(const void *opaque)
 
     virBufferStrcat(&actualbuf, "protocol:\n", NULLSTR(jsonprotocol),
                     "\nformat:\n", NULLSTR(jsonformat), NULL);
-    virBufferTrim(&actualbuf, "\n", -1);
+    virBufferTrim(&actualbuf, "\n");
     virBufferAddLit(&actualbuf, "\n");
 
     jsonpath = g_strdup_printf("%s%s.json", testQemuImageCreatePath, data->name);
diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
index 0334f83628..1c7083ca79 100644
--- a/tests/qemumonitorjsontest.c
+++ b/tests/qemumonitorjsontest.c
@@ -2777,7 +2777,7 @@ testBlockNodeNameDetect(const void *opaque)
 
     virHashForEach(nodedata, testBlockNodeNameDetectFormat, &buf);
 
-    virBufferTrim(&buf, "\n", -1);
+    virBufferTrim(&buf, "\n");
 
     actual = virBufferContentAndReset(&buf);
 
@@ -2919,7 +2919,7 @@ testQueryJobs(const void *opaque)
     for (i = 0; i < njobs; i++)
         testQueryJobsPrintJob(&buf, jobs[i]);
 
-    virBufferTrim(&buf, "\n", -1);
+    virBufferTrim(&buf, "\n");
 
     actual = virBufferContentAndReset(&buf);
 
diff --git a/tests/virbuftest.c b/tests/virbuftest.c
index f2d4d9b9de..f9d19ff1a1 100644
--- a/tests/virbuftest.c
+++ b/tests/virbuftest.c
@@ -102,21 +102,20 @@ static int testBufTrim(const void *data G_GNUC_UNUSED)
     const char *expected = "a,b";
     int ret = -1;
 
-    virBufferTrim(buf, "", 0);
+    virBufferTrim(buf, "");
     buf = &bufinit;
 
     virBufferAddLit(buf, "a;");
-    virBufferTrim(buf, "", 0);
-    virBufferTrim(buf, "", -1);
+    virBufferTrim(buf, "");
+    virBufferTrim(buf, "");
     virBufferTrimLen(buf, 1);
     virBufferTrimLen(buf, 5);
     virBufferTrimLen(buf, 2);
 
     virBufferAddLit(buf, ",b,,");
-    virBufferTrim(buf, NULL, -1);
-    virBufferTrim(buf, "b", -1);
-    virBufferTrim(buf, "b,,", 1);
-    virBufferTrim(buf, ",", -1);
+    virBufferTrim(buf, NULL);
+    virBufferTrim(buf, "b");
+    virBufferTrim(buf, ",,");
 
     result = virBufferContentAndReset(buf);
     if (!result || STRNEQ(result, expected)) {
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 0bb5de540e..32b2792694 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -8453,7 +8453,7 @@ cmdDesc(vshControl *ctl, const vshCmd *cmd)
     while ((opt = vshCommandOptArgv(ctl, cmd, opt)))
         virBufferAsprintf(&buf, "%s ", opt->data);
 
-    virBufferTrim(&buf, " ", -1);
+    virBufferTrim(&buf, " ");
 
     desc = virBufferContentAndReset(&buf);
 
@@ -9570,7 +9570,7 @@ cmdQemuMonitorCommand(vshControl *ctl, const vshCmd *cmd)
     while ((opt = vshCommandOptArgv(ctl, cmd, opt)))
         virBufferAsprintf(&buf, "%s ", opt->data);
 
-    virBufferTrim(&buf, " ", -1);
+    virBufferTrim(&buf, " ");
 
     monitor_cmd = virBufferContentAndReset(&buf);
 
@@ -9863,7 +9863,7 @@ cmdQemuAgentCommand(vshControl *ctl, const vshCmd *cmd)
     while ((opt = vshCommandOptArgv(ctl, cmd, opt)))
         virBufferAsprintf(&buf, "%s ", opt->data);
 
-    virBufferTrim(&buf, " ", -1);
+    virBufferTrim(&buf, " ");
 
     guest_agent_cmd = virBufferContentAndReset(&buf);
 
@@ -14077,7 +14077,7 @@ cmdDomFSInfo(vshControl *ctl, const vshCmd *cmd)
 
             for (j = 0; j < info[i]->ndevAlias; j++)
                 virBufferAsprintf(&targetsBuff, "%s,", info[i]->devAlias[j]);
-            virBufferTrim(&targetsBuff, ",", -1);
+            virBufferTrim(&targetsBuff, ",");
 
             targets = virBufferContentAndReset(&targetsBuff);
 
diff --git a/tools/vsh.c b/tools/vsh.c
index 3c3b4bf1c3..02a6b6c955 100644
--- a/tools/vsh.c
+++ b/tools/vsh.c
@@ -2225,7 +2225,7 @@ vshOutputLogFile(vshControl *ctl, int log_level, const char *msg_format,
     }
     virBufferAsprintf(&buf, "%s ", lvl);
     virBufferVasprintf(&buf, msg_format, ap);
-    virBufferTrim(&buf, "\n", -1);
+    virBufferTrim(&buf, "\n");
     virBufferAddChar(&buf, '\n');
 
     str = virBufferContentAndReset(&buf);
@@ -2517,7 +2517,7 @@ vshTreePrintInternal(vshControl *ctl,
                                  false, indent) < 0)
             return -1;
     }
-    virBufferTrim(indent, "  ", -1);
+    virBufferTrim(indent, "  ");
 
     /* If there was no child device, and we're the last in
      * a list of devices, then print another blank line */
-- 
2.19.2




More information about the libvir-list mailing list