From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:58885) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R5eRS-0003r2-E4 for qemu-devel@nongnu.org; Mon, 19 Sep 2011 10:03:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1R5eRM-00017I-Ju for qemu-devel@nongnu.org; Mon, 19 Sep 2011 10:03:26 -0400 Received: from mx1.redhat.com ([209.132.183.28]:46126) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R5eRM-00017B-Cz for qemu-devel@nongnu.org; Mon, 19 Sep 2011 10:03:20 -0400 Message-ID: <4E774C59.3070401@redhat.com> Date: Mon, 19 Sep 2011 16:06:17 +0200 From: Kevin Wolf MIME-Version: 1.0 References: <1316121071-7690-1-git-send-email-sage@newdream.net> <1316121071-7690-3-git-send-email-sage@newdream.net> In-Reply-To: <1316121071-7690-3-git-send-email-sage@newdream.net> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 2/4] rbd: allow escaping in config string List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Sage Weil Cc: ceph-devel@vger.kernel.org, qemu-devel@nongnu.org Am 15.09.2011 23:11, schrieb Sage Weil: > The config string is variously delimited by =, @, and /, depending on the > field. Allow these characters to be escaped by preceeding them with \. > > Signed-off-by: Sage Weil > --- > block/rbd.c | 29 +++++++++++++++++++++++++++-- > 1 files changed, 27 insertions(+), 2 deletions(-) > > diff --git a/block/rbd.c b/block/rbd.c > index f64b2e0..43f0e63 100644 > --- a/block/rbd.c > +++ b/block/rbd.c > @@ -104,8 +104,15 @@ static int qemu_rbd_next_tok(char *dst, int dst_len, > *p = NULL; > > if (delim != '\0') { > - end = strchr(src, delim); > - if (end) { > + for (end = src; *end; ++end) { > + if (*end == delim) { > + break; > + } > + if (*end == '\\') { > + end++; > + } > + } If src ends with a backslash, you read beyond the end of the string. > + if (*end == delim) { > *p = end + 1; > *end = '\0'; > } > @@ -124,6 +131,19 @@ static int qemu_rbd_next_tok(char *dst, int dst_len, > return 0; > } > > +static void qemu_rbd_unescape(char *src) > +{ > + char *p; > + > + for (p = src; *src; ++src, ++p) { > + if (*src == '\\') { > + src++; > + } > + *p = *src; > + } > + *p = '\0'; > +} This has the same problem. Wouldn't it make sense to have the unescape integrated in qemu_rbd_next_tok? Or are there any places where you would want to call it without doing a qemu_rbd_unescape() afterwards? Kevin