From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR04-VI1-obe.outbound.protection.outlook.com (EUR04-VI1-obe.outbound.protection.outlook.com [40.107.8.79]) by mx.groups.io with SMTP id smtpd.web12.5975.1612434199601209009 for ; Thu, 04 Feb 2021 02:23:21 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=9EIJ5IGB; spf=pass (domain: arm.com, ip: 40.107.8.79, mailfrom: sami.mujawar@arm.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Fx7fVkUlT48Md0YG8RIWgZ/a0bCxrzmIvo/1t5Moqtc=; b=9EIJ5IGBcBwWjIB41kcAy1FFWVDc449bStPoz4jIPT3s9gNW1pzw82LcAQFyZI+4Dy9FXPO52nfxnLJV97kTQ0kWDVSc4g7alyLjAhGr/2IeDLv/TYLXG74qqwPFSByK9Nj9RJXOin2qd6lAIqHf5FuaIM9oKKWJOuU7Fyg/0E0= Received: from AM7PR02CA0006.eurprd02.prod.outlook.com (2603:10a6:20b:100::16) by AM6PR08MB4950.eurprd08.prod.outlook.com (2603:10a6:20b:ea::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3825.20; Thu, 4 Feb 2021 10:23:16 +0000 Received: from AM5EUR03FT038.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:100:cafe::4d) by AM7PR02CA0006.outlook.office365.com (2603:10a6:20b:100::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3825.19 via Frontend Transport; Thu, 4 Feb 2021 10:23:16 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; edk2.groups.io; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;edk2.groups.io; dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM5EUR03FT038.mail.protection.outlook.com (10.152.17.118) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.11 via Frontend Transport; Thu, 4 Feb 2021 10:23:16 +0000 Received: ("Tessian outbound 4d8113405d55:v71"); Thu, 04 Feb 2021 10:23:16 +0000 X-CR-MTA-TID: 64aa7808 Received: from a4b67d3dc395.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id EB816B93-588D-448E-8790-17E271E8581E.1; Thu, 04 Feb 2021 10:23:11 +0000 Received: from EUR01-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id a4b67d3dc395.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 04 Feb 2021 10:23:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Hf1kYwE649Xbq1v8+N+9EBLQUvlC+mWSsj/v1NAN1s0Zf8nKf+FLWVPdddHPWLPS0JoRE6kSbjdTqTDV7JRuWUSkoBmTGaVixKYFSohfPNGMas6EC6uQjHkMiTro+B5RU1y6S+aC8QgBqoXdmoxI499/q/ScIQx+DzhENvzui+D6vwn2USr4zPOY8mK0dvdeFEWyLbwN6boKVlN5QuzEUBDMuDxkANmKacZMOtx3OxtIl1cFtgHTWGreZ/gd/zJh7d0l39sSIAMCIo1SYIYhF+q4hYf99GaCOd55E11Io+7F+MwxMAmOqHseHEsLcTyJaWJjMjZ8ub6Gagw5d3rPTw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Fx7fVkUlT48Md0YG8RIWgZ/a0bCxrzmIvo/1t5Moqtc=; b=mYpfNW7JcjOaohvpKzII0DXjDqIHj4LkzCFsxWnSkGnZEsyhaKW9BqdHvNw8kb7ZXEhh4NtIrA+hJylPSfhvK90ZZGeqEkeUh0cSWMdKbyaIBD9x20tQQf3n0MiiI7YdYOgzc+urw58FUwz82DKduKKSfgX9/1rMR3IWYEejKtlbNQpziX1iyp+OoQtEeyn+ZV5cfNgpSWq81ckoJeGLj+ja4frJQpguKE41F48YcCkZ21msHgjBHRNlC2x4vqt6/2e5WYC1aaXzqai2sFbUDm28Ov2daqN2zTtZxLTkFadE2mFouqJtOMJliJGCRgjHrz4iNGvYWWj7AYqg49HTAw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Fx7fVkUlT48Md0YG8RIWgZ/a0bCxrzmIvo/1t5Moqtc=; b=9EIJ5IGBcBwWjIB41kcAy1FFWVDc449bStPoz4jIPT3s9gNW1pzw82LcAQFyZI+4Dy9FXPO52nfxnLJV97kTQ0kWDVSc4g7alyLjAhGr/2IeDLv/TYLXG74qqwPFSByK9Nj9RJXOin2qd6lAIqHf5FuaIM9oKKWJOuU7Fyg/0E0= Received: from DB7PR08MB3097.eurprd08.prod.outlook.com (2603:10a6:5:1d::27) by DB6PR0801MB2055.eurprd08.prod.outlook.com (2603:10a6:4:6c::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3825.21; Thu, 4 Feb 2021 10:22:06 +0000 Received: from DB7PR08MB3097.eurprd08.prod.outlook.com ([fe80::8c43:eec3:76be:9001]) by DB7PR08MB3097.eurprd08.prod.outlook.com ([fe80::8c43:eec3:76be:9001%4]) with mapi id 15.20.3805.026; Thu, 4 Feb 2021 10:22:06 +0000 From: "Sami Mujawar" To: Pierre Gondois , "devel@edk2.groups.io" , "bob.c.feng@intel.com" , "gaoliming@byosoft.com.cn" CC: nd Subject: Re: [PATCH v1 1/1] BaseTools: Align include guards policy Thread-Topic: [PATCH v1 1/1] BaseTools: Align include guards policy Thread-Index: AQHW8zFMPOTxjraJW0KBx4QKGhaMnKpH150w Date: Thu, 4 Feb 2021 10:22:06 +0000 Message-ID: References: <20210125154525.18449-1-Pierre.Gondois@arm.com> In-Reply-To: <20210125154525.18449-1-Pierre.Gondois@arm.com> Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: AE9711D67DF971419089DFD57F0F0BCB.1 x-checkrecipientchecked: true Authentication-Results-Original: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=arm.com; x-originating-ip: [86.132.153.38] x-ms-publictraffictype: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: ba1d333f-d0e7-4b1f-247e-08d8c8f6e2aa x-ms-traffictypediagnostic: DB6PR0801MB2055:|AM6PR08MB4950: x-ms-exchange-transport-forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:10000;OLM:10000; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: MBDrREJtkcSFbBoHWVcDTN6FtP7lSI87XpcfySrM/Qo89OmE01wny0Fgs5pOLWxjxO09xnvsdLXrPEC3/yyO9LXdGp1x3wLqokm/jLfEk61TlyGLTP2ac3FXzhpGpD6I6RoRZvP8J9kKIdc9BwM7+lA2kbv5GwgqjtSTUHOnYXQpFXCcr4QUXcKOMWuhfgFwBAwdTHVnVyYCSAPDyODNFh2c5ioBHOxQsPsskJpHR8vdrPqwM2zFo8q2oPN6EEw39N5MRg9031YP+EwgLXsCfLc6jqgOBnq/lSEaja+kbXI9p2UZyoONhfak/iuSS+KkqKKWS/uuonbYXA40em6mQj+Epv6gVCDfmLoBOzrSWf/eCQWI8AgW+cQuF4/834KIe4zW7N7ovGVSgc47YxpgtE+9pOxxX69M+JvFac4bM5bcd08iLsl4mjtjPKZhV6V0bgAT0vNFGyDv1EK2v828GZCJv4GaXWAWJlxV0evIhuQmAUNnMCithsVeqp16qY6zhAN9L8IZ4jAHju9vr166TwAUSljgUaBc1gugaMirq4qGhU3GXlUYKXGsXYpIxwiPNV7AHrSBMRN9ECL3awcFHcBhbvTd/5AtE41hEKCWA/w= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB7PR08MB3097.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(39860400002)(396003)(366004)(136003)(346002)(5660300002)(64756008)(52536014)(66446008)(2906002)(26005)(66556008)(7696005)(71200400001)(66946007)(76116006)(53546011)(66476007)(186003)(8676002)(86362001)(4326008)(966005)(478600001)(316002)(110136005)(9686003)(55016002)(33656002)(8936002)(6506007)(83380400001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: =?us-ascii?Q?emojfQm3MzQlaD9Ls5l13kn0fhPltEfEcq0f15xlyqcEpYYdbYvFYp2NFGSx?= =?us-ascii?Q?ki1I+bVKWBfrcS/EWCxqLHesxz9merTpHOAD4uGh8Zlk8lZeN32icN4eLeUf?= =?us-ascii?Q?nuBU7hs1RE3Zmug6Q6LeloPVVRjINahXRxMYvEPC4OGEWBi66JFd10ZyPdVF?= =?us-ascii?Q?C84+e3HwEBRRHWA8BvVSn6P4uqgKXczT/kYASBBeJN+uQnp59crhDrlk/gRP?= =?us-ascii?Q?eVtsGhC/bQo1Uiy1wCByBKIoEjNv1OasH5ZRjvzkCBC1K3dAtpNBsD7J8q6W?= =?us-ascii?Q?a6KQV59Jl+T/w7sO+oE98dh0nwCk8656pCFHoLPiFXN3NW0ahfGVDlvAjG/6?= =?us-ascii?Q?AOcLoywVWB7Q8PytwoeHA+teV0WEU+jp28nYtgPWFdp+tvzuiefni4DMnce5?= =?us-ascii?Q?6y/dVzV59oLkFwDGXeJjfqe5YNw7swvuPN4GJNO5Vcd/x52vrYQ0foCuI/vM?= =?us-ascii?Q?2m+eFCW1+PYSzPV0dzxLFwK/oM3C1l4ye8Q5QHPMObCNIkPmYYLqjVMEaKiz?= =?us-ascii?Q?6XTx/LrG9pmmXBMQBJOou6MOLHj4cVNnmaIEyfBi6pClRV/HGgWdxhdW6sH6?= =?us-ascii?Q?MhpbvtqzX6D3hJYdzLH6J5OKeqVIZPpH8Hw89UpRLSh/rlYmCpKfjf5aTPSU?= =?us-ascii?Q?IRmBwpo2fp4r/pqIjvtb9Ythm8TpNPtr0r52cfAn6x7wIkEhRzZR36eX1II4?= =?us-ascii?Q?+aYtGjLomLSozpP3FdvQyiVnoWnHgn3TUZYSIC3cyzoD3/9QvyMUVNCBJuvy?= =?us-ascii?Q?F29cfoUT9O7BVCzwtL5nM2N0O1h8mn+qmkoQMHsO29i2QTys+VjKch8oZcca?= =?us-ascii?Q?cafVCDiHdeIJKABEalj0XXtrQYzogscNV/mlFYEQ4xZslp2505uVhtPVd1vO?= =?us-ascii?Q?9IPchRTgeKLIOmrSXz6smcVx+VdqX21urQdnVX9FNOP+cFxUN1PKXOp09Bhg?= =?us-ascii?Q?hwnhf1E+vKLkXxOviN5XVwvr+5Z91KzXzm3hAfRfGJGfUYfDU1ZZVBJbk2Li?= =?us-ascii?Q?1vLfyiSAcmF7OfZzSs7EoSVxA6I+Y5pbyWKcFGyuqso4Hd5t/6LO9VQnmmG7?= =?us-ascii?Q?1qCX6obTzu/eotGKSy2PHJey4ynoj16I+ky2b3qQezBVkAWf39BV9sagGy8p?= =?us-ascii?Q?06wAVofFUaCNirqpHdFKMvHyzNzowRPUryCSagUXjnGuu6LG4dq0iveoDG9q?= =?us-ascii?Q?zipef/9uLCSp6Hr+HfwF6E6UMDe5EKZ8cyUc0830mJ0hQyPezXIndWtszE46?= =?us-ascii?Q?Bg6QVZXfFupauH10StQ79gY5ByLW75D7PJiSmuaODSpJzigK5fgVo+SaVcUu?= =?us-ascii?Q?ZKqUalABy0P+PdvzIDoeisaA?= MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB2055 Original-Authentication-Results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=arm.com; Return-Path: Sami.Mujawar@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT038.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 6194d847-a766-4401-c5f3-08d8c8f6b94b X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9xxgef5zEcZP7zrEzYxO+lTI3pqCxU1VRPwManTWdhSvLL2R0DjcxE6SXwpYEynyWDf/WwHNMoeZneYEki4q6VPmsfLmajpGv9d+xkaoeQGqLX3IiWwSGxpJYLELZqBb+JVCWUDCU01zdSdTwqPe5MjP2XohbpTbbJa7Q7bZVsYkccqEjgZstlmHRwf36LaeuRPMyDHfCwhkzX1anXQzsnZrK6MqXCNVo4sCNqE+55yTV7MHmBgEAYEkG1O752EWnVOey3iEV5Niuis2yiQMAYn4f2qqH4OwlrOqabJtxYksuNKPeuFU+gD3s2+mIlrTu9qqv6arTQA94lmalDpMad531UK/FJCq/VET8cORFDV7gFYMQ3qLOHUE4gxwLPm3mBD/IB/vrjkpiyG1lIxjo61KmfdABPcTGMm1cQmpPni5Y6xqe+XLe3+y9PLhMSbdZvOG9oDmh7dz2GQLeJShx0DVMRn6d6MOS+Aqbc3rp/nchKEjPoAINU0oFOWzjmo8ZegHNVATtSRpWDH7zUE6T1k7E0ydTGtnP+w9LRU3V2N0WSkZWOX9cz+A7U6RkQ42kA3pmYqJSrrUa/CMJMs++gzX5Tp5X63l2Rcx4V2hfUqPupq4iS6MY3+hY6PinC06CExb6+7EGWXMDNXH0e6uIkiov+4iu5lnNwPRlGFlyR8DY3o2Pj/zC2sJ8Qa+qu4W07Wq1NCGSZd5RrT0R2qCFPOAPNRSdaNn7CACrSkx6HA= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(396003)(136003)(39860400002)(346002)(36840700001)(46966006)(82740400003)(478600001)(83380400001)(966005)(82310400003)(52536014)(4326008)(70206006)(2906002)(81166007)(86362001)(5660300002)(70586007)(6506007)(53546011)(26005)(186003)(8936002)(55016002)(47076005)(336012)(33656002)(9686003)(8676002)(7696005)(36860700001)(356005)(316002)(110136005);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2021 10:23:16.2646 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ba1d333f-d0e7-4b1f-247e-08d8c8f6e2aa X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM5EUR03FT038.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4950 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Pierre, Thank you for this patch. Reviewed-by: Sami Mujawar Regards, Sami Mujawar -----Original Message----- From: Pierre.Gondois@arm.com =20 Sent: 25 January 2021 03:45 PM To: devel@edk2.groups.io; bob.c.feng@intel.com; gaoliming@byosoft.com.cn Cc: Sami Mujawar Subject: [PATCH v1 1/1] BaseTools: Align include guards policy From: Pierre Gondois The EDK II C Coding Standards Specification states that: "Names starting with one or two underscores, such as _MACRO_GUARD_FILE_NAME_H_, must not be used. They are reserved for compiler implementation." [1] The Ecc tool currently checks that the include guard end with a trailing underscore. Thus, the check and the error message should both be modified. The new check forces having one sole trailing underscore character, as the example in the specification shows: "FILE_NAME_H_" [1] This would allow to have more consistency. [1] Section 5.3.5 "All include file contents must be protected by a #include guard": https://edk2-docs.gitbook.io/ edk-ii-c-coding-standards-specification/ 5_source_files/53_include_files Signed-off-by: Pierre Gondois --- BaseTools/Source/Python/Ecc/Check.py | 3 ++- BaseTools/Source/Python/Ecc/EccToolError.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/BaseTools/Source/Python/Ecc/Check.py b/BaseTools/Source/Python= /Ecc/Check.py index 6087abfa4d8d..14759d21f5d8 100644 --- a/BaseTools/Source/Python/Ecc/Check.py +++ b/BaseTools/Source/Python/Ecc/Check.py @@ -2,6 +2,7 @@ # This file is used to define checkpoints used by ECC tool # # Copyright (c) 2008 - 2020, Intel Corporation. All rights reserved.
+# Copyright (c) 2021, Arm Limited. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent # from __future__ import absolute_import @@ -1438,7 +1439,7 @@ class Check(object): RecordSet =3D EccGlobalData.gDb.TblFile.Exec(SqlCommand) for Record in RecordSet: Name =3D Record[1].replace('#ifndef', '').strip() - if Name[-1] !=3D '_': + if Name[0] =3D=3D '_' or Name[-1] !=3D '_' or Name[-2] =3D= =3D '_': if not EccGlobalData.gException.IsException(ERROR_NAMI= NG_CONVENTION_CHECK_IFNDEF_STATEMENT, Name): EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CO= NVENTION_CHECK_IFNDEF_STATEMENT, OtherMsg=3D"The #ifndef name [%s] does not= follow the rules" % (Name), BelongsToTable=3DFileTable, BelongsToItem=3DRe= cord[0]) =20 diff --git a/BaseTools/Source/Python/Ecc/EccToolError.py b/BaseTools/Source= /Python/Ecc/EccToolError.py index 0ff3b42674d4..58d0749477b2 100644 --- a/BaseTools/Source/Python/Ecc/EccToolError.py +++ b/BaseTools/Source/Python/Ecc/EccToolError.py @@ -2,6 +2,7 @@ # Standardized Error Handling infrastructures. # # Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.
+# Copyright (c) 2021, Arm Limited. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent # =20 @@ -161,7 +162,7 @@ gEccErrorMessage =3D { ERROR_NAMING_CONVENTION_CHECK_ALL : "", ERROR_NAMING_CONVENTION_CHECK_DEFINE_STATEMENT : "Only capital letters= are allowed to be used for #define declarations", ERROR_NAMING_CONVENTION_CHECK_TYPEDEF_STATEMENT : "Only capital letter= s are allowed to be used for typedef declarations", - ERROR_NAMING_CONVENTION_CHECK_IFNDEF_STATEMENT : "The #ifndef at the s= tart of an include file should use both prefix and postfix underscore chara= cters, '_'", + ERROR_NAMING_CONVENTION_CHECK_IFNDEF_STATEMENT : "The #ifndef at the s= tart of an include file should have one postfix underscore, and no prefix u= nderscore character '_'", ERROR_NAMING_CONVENTION_CHECK_PATH_NAME : """Path name does not follow= the rules: 1. First character should be upper case 2. Must contain lower c= ase characters 3. No white space characters""", ERROR_NAMING_CONVENTION_CHECK_VARIABLE_NAME : """Variable name does no= t follow the rules: 1. First character should be upper case 2. Must contain= lower case characters 3. No white space characters 4. Global variable name= must start with a 'g'""", ERROR_NAMING_CONVENTION_CHECK_FUNCTION_NAME : """Function name does no= t follow the rules: 1. First character should be upper case 2. Must contain= lower case characters 3. No white space characters""", --=20 2.17.1