Return-Path: X-Original-To: notmuch@notmuchmail.org Delivered-To: notmuch@notmuchmail.org Received: from localhost (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id BE51E429E4E for ; Wed, 14 Dec 2011 12:37:18 -0800 (PST) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org X-Spam-Flag: NO X-Spam-Score: -0.799 X-Spam-Level: X-Spam-Status: No, score=-0.799 tagged_above=-999 required=5 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled Received: from olra.theworths.org ([127.0.0.1]) by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id l4hAAsjFsKCW for ; Wed, 14 Dec 2011 12:37:18 -0800 (PST) Received: from mail-fx0-f53.google.com (mail-fx0-f53.google.com [209.85.161.53]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client certificate requested) by olra.theworths.org (Postfix) with ESMTPS id A4B30429E4D for ; Wed, 14 Dec 2011 12:37:17 -0800 (PST) Received: by faaa5 with SMTP id a5so1780547faa.26 for ; Wed, 14 Dec 2011 12:37:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=from:to:cc:subject:in-reply-to:references:user-agent:date :message-id:mime-version:content-type; bh=AHfH6eUp0sNAMOWaBq7dXPdS2LBpX5CT5QuTf53+kRQ=; b=dPQ/RmKcI9/am33Y0t8gWN4sDWQb1mL1ZCy1GC1kA2lYghAmcn28XnEgurYtVcGNes FiSGW7mjBEsBIDyW1nNCeX1Lf08n3bYNf91s84Ihkm1CAAkLuOswxlrIadQyV/kTn8Va 7y6NJoHuKXv8OeGIqwyz7h6xHe9hx/g9UFDTw= Received: by 10.180.84.33 with SMTP id v1mr558075wiy.4.1323895036310; Wed, 14 Dec 2011 12:37:16 -0800 (PST) Received: from localhost ([91.144.186.21]) by mx.google.com with ESMTPS id fg15sm5766611wbb.7.2011.12.14.12.37.15 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 14 Dec 2011 12:37:15 -0800 (PST) From: Dmitry Kurochkin To: David Bremner , notmuch@notmuchmail.org Subject: Re: [Alpha Patch 2/2] test: update dump-restore tests for 8 bit characters. In-Reply-To: <1323893641-4677-2-git-send-email-david@tethera.net> References: <1323808075-7417-7-git-send-email-david@tethera.net> <1323893641-4677-1-git-send-email-david@tethera.net> <1323893641-4677-2-git-send-email-david@tethera.net> User-Agent: Notmuch/0.10.2+96~g74e5ae5 (http://notmuchmail.org) Emacs/23.3.1 (x86_64-pc-linux-gnu) Date: Thu, 15 Dec 2011 00:36:38 +0400 Message-ID: <87pqfqubzd.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: David Bremner , pere@hungry.com X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Dec 2011 20:37:18 -0000 On Wed, 14 Dec 2011 16:14:01 -0400, David Bremner wrote: > From: David Bremner > > hex-escape: fix for handling of 8 bit chars > > The low level problem was passing negative numbers to sprintf(s,"%x"); > we fix this and clarify the api for hex_(decode|encode) by making > encode go from (unsigned char *) (i.e. 8bit) to (char *) and decode > vise-versa. I did not do a proper review. But I think the encoder and decoder should accept and return the same type, either char* or unsigned char*. The decision should be based on what type strings (that would be fed to the encoder and decoder) have in notmuch code. I guess it is char*, so the encoder and decoder should take and return char*. Internally we would cast char* to unsigned char*. Also, I do not like the _octet typedef in hex-escape.c. Having different function parameters in header and .c is confusing. IMO we should either move the typedef to some header, or just use unsigned char. Regards, Dmitry > --- > test/dump-restore | 2 -- > test/hex-escaping | 1 - > util/hex-escape.c | 26 +++++++++++++++----------- > util/hex-escape.h | 6 ++++-- > 4 files changed, 19 insertions(+), 16 deletions(-) > > diff --git a/test/dump-restore b/test/dump-restore > index eee1773..c5b2e86 100755 > --- a/test/dump-restore > +++ b/test/dump-restore > @@ -114,7 +114,6 @@ notmuch dump --format=notmuch > BACKUP > notmuch tag +"$tag1" +"$tag2" +"$tag3" -inbox -unread "*" > > test_begin_subtest 'format=notmuch, round trip with strange tags' > - test_subtest_known_broken > notmuch dump --format=notmuch > EXPECTED.$test_count > notmuch dump --format=notmuch | notmuch restore --format=notmuch > notmuch dump --format=notmuch > OUTPUT.$test_count > @@ -122,7 +121,6 @@ test_expect_equal_file EXPECTED.$test_count OUTPUT.$test_count > > > test_begin_subtest 'format=notmuch, checking encoded output' > - test_subtest_known_broken > cp /dev/null EXPECTED.$test_count > notmuch dump --format=notmuch -- from:cworth |\ > awk "{ print \$1 \" $enc1 $enc2 $enc3\" }" > EXPECTED.$test_count > diff --git a/test/hex-escaping b/test/hex-escaping > index 2053fb0..daa6446 100755 > --- a/test/hex-escaping > +++ b/test/hex-escaping > @@ -19,7 +19,6 @@ $TEST_DIRECTORY/hex-xcode e < EXPECTED.$test_count |\ > test_expect_equal_file EXPECTED.$test_count OUTPUT.$test_count > > test_begin_subtest "round trip 8bit chars" > -test_subtest_known_broken > echo '%c3%91%c3%a5%c3%b0%c3%a3%c3%a5%c3%a9-%c3%8f%c3%8a' > EXPECTED.$test_count > $TEST_DIRECTORY/hex-xcode d < EXPECTED.$test_count |\ > $TEST_DIRECTORY/hex-xcode e > OUTPUT.$test_count > diff --git a/util/hex-escape.c b/util/hex-escape.c > index dcf87cf..565ae99 100644 > --- a/util/hex-escape.c > +++ b/util/hex-escape.c > @@ -28,23 +28,24 @@ static const size_t default_buf_size=1024; > static const char* output_charset= > "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-_@=.:,"; > > -static const char escape_char='%'; > +static const int escape_char = '%'; > > static int > is_output (char c) { > return (strchr (output_charset, c) != NULL); > } > > +typedef unsigned char _octet; > > static int > -maybe_realloc(void *ctx, size_t needed, char **out, size_t *out_size) > +maybe_realloc(void *ctx, size_t needed, _octet **out, size_t *out_size) > { > if (*out_size < needed) { > > if (*out == NULL) > *out = talloc_size(ctx,needed); > else > - *out = talloc_realloc(ctx,*out,char,needed); > + *out = talloc_realloc(ctx, *out, _octet, needed); > > if (*out == NULL) > return 0; > @@ -56,24 +57,27 @@ maybe_realloc(void *ctx, size_t needed, char **out, size_t *out_size) > > > hex_status_t > -hex_encode (void *ctx, const char *in, char **out, size_t *out_size) > +hex_encode (void *ctx, const _octet *in, char **out, size_t *out_size) > { > > - const char *p; > + const _octet *p; > char *q; > > - int escape_count=0; > + size_t escape_count = 0; > + size_t len = 0; > size_t needed; > > - for (p = in; *p; p++) > + for (p = in; *p; p++) { > escape_count += (! is_output (*p)); > + len++; > + } > > - needed = strlen (in) + 2*escape_count + 1; > + needed = len + 2*escape_count + 1; > > if (*out == NULL) > *out_size=0; > > - if (!maybe_realloc (ctx, needed, out, out_size)) > + if (!maybe_realloc (ctx, needed, (_octet**)out, out_size)) > return HEX_OUT_OF_MEMORY; > > q = *out; > @@ -94,12 +98,12 @@ hex_encode (void *ctx, const char *in, char **out, size_t *out_size) > > > hex_status_t > -hex_decode (void *ctx, const char *in, char **out, size_t *out_size) { > +hex_decode (void *ctx, const char *in, _octet **out, size_t *out_size) { > > char buf[3]; > > const char *p; > - char *q; > + _octet *q; > > size_t escape_count = 0; > size_t needed = 0; > diff --git a/util/hex-escape.h b/util/hex-escape.h > index 98ecbe0..e04aff5 100644 > --- a/util/hex-escape.h > +++ b/util/hex-escape.h > @@ -8,8 +8,10 @@ typedef enum hex_status { > } hex_status_t; > > hex_status_t > -hex_encode (void *talloc_ctx, const char *in, char **out, size_t *out_size); > +hex_encode (void *talloc_ctx, const unsigned char *in, char **out, > + size_t *out_size); > > hex_status_t > -hex_decode (void *talloc_ctx, const char *in, char **out, size_t *out_size); > +hex_decode (void *talloc_ctx, const char *in, unsigned char **out, > + size_t *out_size); > #endif > -- > 1.7.7.3 > > _______________________________________________ > notmuch mailing list > notmuch@notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch