aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--g10/misc.c35
1 files changed, 21 insertions, 14 deletions
diff --git a/g10/misc.c b/g10/misc.c
index 58932ed7b..4f8e810f2 100644
--- a/g10/misc.c
+++ b/g10/misc.c
@@ -1245,11 +1245,13 @@ string_to_cipher_algo (const char *string)
if (!val && string && (string[0]=='S' || string[0]=='s'))
{
char *endptr;
+ long longval;
string++;
- val = strtol (string, &endptr, 10);
- if (!*string || *endptr || openpgp_cipher_test_algo (val))
- val = 0;
+ longval = strtol (string, &endptr, 10);
+ if (*string && !*endptr && longval >= 0 && longval < 256
+ && openpgp_cipher_test_algo ((int)longval))
+ val = longval;
}
return val;
@@ -1272,17 +1274,20 @@ string_to_aead_algo (const char *string)
result = 1;
else if (!ascii_strcasecmp (string, "OCB"))
result = 2;
- else if ((string[0]=='A' || string[0]=='a'))
+ else
{
- char *endptr;
+ result = 0;
+ if ((string[0]=='A' || string[0]=='a'))
+ {
+ char *endptr;
+ long longval;
- string++;
- result = strtol (string, &endptr, 10);
- if (!*string || *endptr || result < 1 || result > 2)
- result = 0;
+ string++;
+ longval = strtol (string, &endptr, 10);
+ if (*string && !*endptr && longval >= 1 && longval <= 2)
+ result = longval;
+ }
}
- else
- result = 0;
return result;
}
@@ -1303,11 +1308,13 @@ string_to_digest_algo (const char *string)
if (!val && string && (string[0]=='H' || string[0]=='h'))
{
char *endptr;
+ long longval;
string++;
- val = strtol (string, &endptr, 10);
- if (!*string || *endptr || openpgp_md_test_algo (val))
- val = 0;
+ longval = strtol (string, &endptr, 10);
+ if (*string && !*endptr && longval >= 0 && longval < 256
+ && openpgp_md_test_algo ((int)longval))
+ val = longval;
}
return val;