[{"id":12994,"web_url":"https://patchwork.libcamera.org/comment/12994/","msgid":"<20201005170838.GW3931@pendragon.ideasonboard.com>","date":"2020-10-05T17:08:38","subject":"Re: [libcamera-devel] [PATCH v2] android: jpeg: exif: Sanitize\n\tASCII strings with utils::toAscii()","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Mon, Oct 05, 2020 at 10:27:01PM +0530, Umang Jain wrote:\n> Use the newly introduced utils::toAscii() utility to remove all\n> non-ASCII characters for EXIF_FORMAT_ASCII strings.\n> \n> Signed-off-by: Umang Jain <email@uajain.com>\n> ---\n>  src/android/jpeg/exif.cpp | 16 ++++++++++++----\n>  1 file changed, 12 insertions(+), 4 deletions(-)\n> \n> ---\n> \n> Changes in v2:\n>  - Set new length for sanitized string. \n> \n> diff --git a/src/android/jpeg/exif.cpp b/src/android/jpeg/exif.cpp\n> index 3fd5d55..56e3c6a 100644\n> --- a/src/android/jpeg/exif.cpp\n> +++ b/src/android/jpeg/exif.cpp\n> @@ -8,6 +8,7 @@\n>  #include \"exif.h\"\n>  \n>  #include \"libcamera/internal/log.h\"\n> +#include \"libcamera/internal/utils.h\"\n>  \n>  using namespace libcamera;\n>  \n> @@ -171,15 +172,22 @@ void Exif::setRational(ExifIfd ifd, ExifTag tag, ExifRational item)\n>  \n>  void Exif::setString(ExifIfd ifd, ExifTag tag, ExifFormat format, const std::string &item)\n>  {\n> -\t/* Pad 1 extra byte for null-terminated string in ASCII format. */\n> -\tsize_t length = format == EXIF_FORMAT_ASCII ?\n> -\t\t\titem.length() + 1 : item.length();\n> +\tsize_t length = item.length();\n> +\tstd::string str = item;\n> +\tif (format == EXIF_FORMAT_ASCII) {\n> +\t\tstr = utils::toAscii(str);\n> +\t\t/*\n> +\t\t * Get new length and pad 1 extra byte to null-terminate\n> +\t\t * the ASCII string.\n> +\t\t */\n> +\t\tlength = str.length() + 1;\n> +\t}\n\nSmall optimization, we can avoid computing the size before toAscii(). We\ncan also avoid a copy of the string for the non-ascii case.\n\n\tstd::string ascii;\n\tsize_t length;\n\tchar *str;\n\n\tif (format == EXIF_FORMAT_ASCII) {\n\t\tascii = utils::toAscii(item);\n\t\tstr = ascii.c_str();\n\n\t\t/* Pad 1 extra byte to null-terminate the ASCII string. */\n\t\tlength = ascii.length() + 1;\n\t} else {\n\t\tstr = item.c_str();\n\n\t\t/*\n\t\t * Strings stored in different formats (EXIF_FORMAT_UNDEFINED)\n\t\t * are not null-terminated.\n\t\t */\n\t\tlength = item.length();\n\t}\n\n\tExifEntry *entry = createEntry(ifd, tag, format, length, length);\n\tif (!entry)\n\t\treturn;\n\n\tmemcpy(entry->data, str, length);\n\nIf you think that's not a useful optimization, feel free to drop it.\n\n>  \tExifEntry *entry = createEntry(ifd, tag, format, length, length);\n>  \tif (!entry)\n>  \t\treturn;\n>  \n> -\tmemcpy(entry->data, item.c_str(), length);\n> +\tmemcpy(entry->data, str.c_str(), length);\n>  \texif_entry_unref(entry);\n>  }\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 215F2C3B5D\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  5 Oct 2020 17:09:20 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B109E63BFE;\n\tMon,  5 Oct 2020 19:09:19 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 27A5C63BED\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  5 Oct 2020 19:09:18 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 8E9E73B;\n\tMon,  5 Oct 2020 19:09:17 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"J+vhKwVv\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1601917757;\n\tbh=cKTubs/TSacrDkd7iSm918y6qElMiWnsGsRugn4C0Ww=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=J+vhKwVvNUcD6kEJ0qLhcliaq+u4qV5npPvklcQ1GYSKOprY2E0xC/kpqmg6ug9Lc\n\tOOVsuU/EOImimipOZj/tLu6wVl8AQnarXVBKURQoT/iQ7D9SIDzsZVnLluugr2jDqu\n\tCHtFZrm0o1hfN1h1gaMY5XhcUo21i3bnd0zspXo8=","Date":"Mon, 5 Oct 2020 20:08:38 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Umang Jain <email@uajain.com>","Message-ID":"<20201005170838.GW3931@pendragon.ideasonboard.com>","References":"<20201005165701.77469-1-email@uajain.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20201005165701.77469-1-email@uajain.com>","Subject":"Re: [libcamera-devel] [PATCH v2] android: jpeg: exif: Sanitize\n\tASCII strings with utils::toAscii()","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]