Skip to content

Commit

Permalink
Check CLI argument bounds (#4919)
Browse files Browse the repository at this point in the history
  • Loading branch information
newhoggy authored Mar 3, 2023
1 parent 4731a8e commit 0c9f483
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 60 deletions.
11 changes: 5 additions & 6 deletions cardano-cli/src/Cardano/CLI/Byron/Parsers.hs
Original file line number Diff line number Diff line change
Expand Up @@ -664,12 +664,11 @@ pNetworkId =

pTestnetMagic :: Parser NetworkMagic
pTestnetMagic =
NetworkMagic <$>
Opt.option Opt.auto
( Opt.long "testnet-magic"
<> Opt.metavar "NATURAL"
<> Opt.help "Specify a testnet magic id."
)
fmap NetworkMagic $ Opt.option (bounded "TESTNET_MAGIC") $ mconcat
[ Opt.long "testnet-magic"
, Opt.metavar "NATURAL"
, Opt.help "Specify a testnet magic id."
]

parseNewSigningKeyFile :: String -> Parser NewSigningKeyFile
parseNewSigningKeyFile opt =
Expand Down
22 changes: 11 additions & 11 deletions cardano-cli/src/Cardano/CLI/Helpers.hs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}

module Cardano.CLI.Helpers
( HelpersError(..)
Expand All @@ -19,12 +20,22 @@ import Cardano.Prelude (ConvertText (..))
import Codec.CBOR.Pretty (prettyHexEnc)
import Codec.CBOR.Read (DeserialiseFailure, deserialiseFromBytes)
import Codec.CBOR.Term (decodeTerm, encodeTerm)
import Control.Exception (Exception (..), IOException)
import Control.Monad (unless, when)
import Control.Monad.IO.Class (MonadIO (..))
import Control.Monad.Trans.Except (ExceptT)
import Control.Monad.Trans.Except.Extra (handleIOExceptT, left)
import Data.Bifunctor (Bifunctor (..))
import Data.ByteString (ByteString)
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as LB
import Data.Functor (void)
import Data.Text (Text)
import qualified Data.Text as Text
import qualified Data.Text.IO as Text
import qualified System.Console.ANSI as ANSI
import System.Console.ANSI
import qualified System.Directory as IO
import qualified System.IO as IO

import Cardano.Binary (Decoder, fromCBOR)
Expand All @@ -34,17 +45,6 @@ import qualified Cardano.Chain.Update as Update
import qualified Cardano.Chain.UTxO as UTxO
import Cardano.CLI.Types

import Control.Exception (Exception (..), IOException)
import Control.Monad (unless, when)
import Control.Monad.IO.Class (MonadIO (..))
import Control.Monad.Trans.Except (ExceptT)
import Data.Bifunctor (Bifunctor (..))
import Data.ByteString (ByteString)
import Data.Functor (void)
import Data.Text (Text)
import qualified Data.Text.IO as Text
import qualified System.Directory as IO

data HelpersError
= CBORPrettyPrintError !DeserialiseFailure
| CBORDecodingError !DeserialiseFailure
Expand Down
80 changes: 37 additions & 43 deletions cardano-cli/src/Cardano/CLI/Shelley/Parsers.hs
Original file line number Diff line number Diff line change
Expand Up @@ -1730,31 +1730,28 @@ pSigningKeyFile fdir =

pKesPeriod :: Parser KESPeriod
pKesPeriod =
KESPeriod <$>
Opt.option Opt.auto
( Opt.long "kes-period"
<> Opt.metavar "NATURAL"
<> Opt.help "The start of the KES key validity period."
)
fmap KESPeriod $ Opt.option (bounded "KES_PERIOD") $ mconcat
[ Opt.long "kes-period"
, Opt.metavar "NATURAL"
, Opt.help "The start of the KES key validity period."
]

pEpochNo :: Parser EpochNo
pEpochNo =
EpochNo <$>
Opt.option Opt.auto
( Opt.long "epoch"
<> Opt.metavar "NATURAL"
<> Opt.help "The epoch number."
)
fmap EpochNo $ Opt.option (bounded "EPOCH") $ mconcat
[ Opt.long "epoch"
, Opt.metavar "NATURAL"
, Opt.help "The epoch number."
]


pEpochNoUpdateProp :: Parser EpochNo
pEpochNoUpdateProp =
EpochNo <$>
Opt.option Opt.auto
( Opt.long "epoch"
<> Opt.metavar "NATURAL"
<> Opt.help "The epoch number in which the update proposal is valid."
)
fmap EpochNo $ Opt.option (bounded "EPOCH") $ mconcat
[ Opt.long "epoch"
, Opt.metavar "EPOCH"
, Opt.help "The epoch number in which the update proposal is valid."
]

pGenesisFile :: String -> Parser GenesisFile
pGenesisFile desc =
Expand Down Expand Up @@ -2054,12 +2051,11 @@ pNetworkId =

pTestnetMagic :: Parser NetworkMagic
pTestnetMagic =
NetworkMagic <$>
Opt.option Opt.auto
( Opt.long "testnet-magic"
<> Opt.metavar "NATURAL"
<> Opt.help "Specify a testnet magic id."
)
fmap NetworkMagic $ Opt.option (bounded "TESTNET_MAGIC") $ mconcat
[ Opt.long "testnet-magic"
, Opt.metavar "TESTNET_MAGIC"
, Opt.help "Specify a testnet magic id."
]

pTxSubmitFile :: Parser FilePath
pTxSubmitFile =
Expand Down Expand Up @@ -2367,12 +2363,12 @@ pPolicyId =

pInvalidBefore :: Parser SlotNo
pInvalidBefore = fmap SlotNo $ asum
[ Opt.option Opt.auto $ mconcat
[ Opt.option (bounded "SLOT") $ mconcat
[ Opt.long "invalid-before"
, Opt.metavar "SLOT"
, Opt.help "Time that transaction is valid from (in slots)."
]
, Opt.option Opt.auto $ mconcat
, Opt.option (bounded "SLOT") $ mconcat
[ Opt.long "lower-bound"
, Opt.metavar "SLOT"
, Opt.help $ mconcat
Expand All @@ -2386,12 +2382,12 @@ pInvalidBefore = fmap SlotNo $ asum
pInvalidHereafter :: Parser SlotNo
pInvalidHereafter =
fmap SlotNo $ asum
[ Opt.option Opt.auto $ mconcat
[ Opt.option (bounded "SLOT") $ mconcat
[ Opt.long "invalid-hereafter"
, Opt.metavar "SLOT"
, Opt.help "Time that transaction is valid until (in slots)."
]
, Opt.option Opt.auto $ mconcat
, Opt.option (bounded "SLOT") $ mconcat
[ Opt.long "upper-bound"
, Opt.metavar "SLOT"
, Opt.help $ mconcat
Expand All @@ -2400,7 +2396,7 @@ pInvalidHereafter =
]
, Opt.internal
]
, Opt.option Opt.auto $ mconcat
, Opt.option (bounded "SLOT") $ mconcat
[ Opt.long "ttl"
, Opt.metavar "SLOT"
, Opt.help "Time to live (in slots) (deprecated; use --invalid-hereafter instead)."
Expand Down Expand Up @@ -3051,12 +3047,11 @@ pPoolDeposit =

pEpochBoundRetirement :: Parser EpochNo
pEpochBoundRetirement =
EpochNo <$>
Opt.option Opt.auto
( Opt.long "pool-retirement-epoch-boundary"
<> Opt.metavar "INT"
<> Opt.help "Epoch bound on pool retirement."
)
fmap EpochNo $ Opt.option (bounded "EPOCH_BOUNDARY") $ mconcat
[ Opt.long "pool-retirement-epoch-boundary"
, Opt.metavar "EPOCH_BOUNDARY"
, Opt.help "Epoch bound on pool retirement."
]

pNumberOfPools :: Parser Natural
pNumberOfPools =
Expand Down Expand Up @@ -3248,14 +3243,13 @@ defaultByronEpochSlots = 21600

pEpochSlots :: Parser EpochSlots
pEpochSlots =
EpochSlots <$>
Opt.option Opt.auto
( Opt.long "epoch-slots"
<> Opt.metavar "NATURAL"
<> Opt.help "The number of slots per epoch for the Byron era."
<> Opt.value defaultByronEpochSlots -- Default to the mainnet value.
<> Opt.showDefault
)
fmap EpochSlots $ Opt.option (bounded "SLOTS") $ mconcat
[ Opt.long "epoch-slots"
, Opt.metavar "SLOTS"
, Opt.help "The number of slots per epoch for the Byron era."
, Opt.value defaultByronEpochSlots -- Default to the mainnet value.
, Opt.showDefault
]

pProtocolVersion :: Parser (Natural, Natural)
pProtocolVersion =
Expand Down

0 comments on commit 0c9f483

Please sign in to comment.